matlab - MATLAB:表的相等行或字符串的相等字
问题描述
我想用不同的字符串制作不同的表格。字符串具有不同的长度,因此表将具有不同的行数。我想组合这些表(最后),因此需要我拥有的表具有相同数量的行。我的计划是使用 NaN 来做到这一点,但没有成功。
我在这里有我的代码尝试,我正在努力的地方,标记为“问题位置”。代码:
String = ["Random info in middle one, "+ ...
"Random info still continues. ",
"Random info in middle two. "+ ...
"Random info still continues. ExtraWord1 ExtraWord2 ExtraWord3 "]; % String 2 has one word more than string one
%%%%%% FOCUS AREA BEGINS %%%%%%%%
for x=1:length(String)
% Plan to add NaNs
documents_Overall = tokenizedDocument(String(x,1));
tdetails = tokenDetails(documents_Overall);
StringTable = tdetails(:,{'Token','Type'});
StringHeight(x) = height(StringTable);
MaxHeight=max(StringHeight);
StringTable(end+1:MaxHeight,1)=NaN; % Problem location.
%Plan to Convert table back to string
DataCell = table2cell(StringTable);
String(x,1) = [DataCell{:}];
end
%%%%%% FOCUS AREA ENDS %%%%%%%%
%Plan to combine tables
documents_Middle = tokenizedDocument(String);
tdetails = tokenDetails(documents_Middle);
t = table();d = tokenizedDocument(String);
variableNames = [];variables = [];
for n=1:length(d)
variableNames = [variableNames {sprintf('Tokens for sentence %d',n)} {sprintf('Type for sentence %d',n)}];
variables = [variables {d(n).tokenDetails.Token} {d(n).tokenDetails.Type}];
end
%Table = cell2table(variables);
table(variables{:},'VariableNames',variableNames)
此延续旨在使行数与行数相等,对于任意数量的字符串,所有其他字符串都需要填充以匹配最长的字符串。我的计划是使用 NaN 来实现这个目标,但没有成功。本示例的结果应如下所示:
所有帮助表示赞赏。谢谢
解决方案
我已经建立在我对你之前的问题的回答之上。
下面的逻辑是我们先找到最大列的大小(本例中为14);然后,我们找到需要填充的列的索引(我们知道这些列是成对出现的,所以在这样做时我们可以只考虑其他列);最后,我们遍历需要填充的列,用<missing>
(NaN 等价于字符串)填充所述列,并用letters
.
s = ["Random info in middle one, "+ ...
"Random info still continues. ",
"Random info in middle two. "+ ...
"Random info still continues. ExtraWord ExtraWord ExtraWord "];
t = table();
d = tokenizedDocument(s);
variableNames = [];
variables = [];
max_column_size = 1;
for n=1:length(d)
variableNames = [variableNames {sprintf('Tokens for sentence %d',n)} {sprintf('Type for sentence %d',n)}];
variables = [variables {d(n).tokenDetails.Token} {d(n).tokenDetails.Type}];
column_size = size(d(n).tokenDetails.Token,1);
if column_size > max_column_size
max_column_size = column_size;
end
end
% Setup anonymous function to determine size of column
f = @(x) size(x,1) < max_column_size;
% Loop over variables to determine which columns need to be padded
indeces_to_pad = find(cell2mat(cellfun(f,variables,'UniformOutput',false)));
indeces_to_pad(2:2:end) = [];
% Loop over the columns to be padded and pad them
for n=1:length(indeces_to_pad)
index_to_pad = indeces_to_pad(n);
column_size_diff = max_column_size - length(variables{index_to_pad});
variables{index_to_pad} = [variables{index_to_pad}; NaN((column_size_diff), 1)];
variables{index_to_pad+1} = [variables{index_to_pad+1}; categorical(repmat("letters",(column_size_diff), 1))];
end
table(variables{:},'VariableNames',variableNames)
将产生下表:
ans =
14×4 table
Tokens for sentence 1 Type for sentence 1 Tokens for sentence 2 Type for sentence 2
_____________________ ___________________ _____________________ ___________________
"Random" letters "Random" letters
"info" letters "info" letters
"in" letters "in" letters
"middle" letters "middle" letters
"one" letters "two" letters
"," punctuation "." punctuation
"Random" letters "Random" letters
"info" letters "info" letters
"still" letters "still" letters
"continues" letters "continues" letters
"." punctuation "." punctuation
<missing> letters "ExtraWord" letters
<missing> letters "ExtraWord" letters
<missing> letters "ExtraWord" letters
推荐阅读
- xml - 如何使用来自子节点的 xslt 从 xml 中获取以下兄弟姐妹
- discord.js - 全球禁令不包括某些服务器 Discord.JS
- laravel - 结帐付款后如何处理 webhook 内部的错误
- javascript - 反应滑块防止图像在更改时重新加载
- php - 将参数传递给 WordPress 中的短代码函数
- docker - AWS Codebuild 仅在未进行任何更改时使用缓存的 Docker 层
- rust - 切换可选的构建依赖项和使用功能构建依赖项
- cron - 用于在 Apache Airflow 中安排自触发 DAG 的 crontab 表达式
- sql - 如何在 Group By 查询中显示零值
- spring-boot - 为 Spring Boot 应用程序实现状态管理