【发布时间】:2020-11-12 00:57:14
【问题描述】:
在此处下载表格:http://www.mediafire.com/file/m81vtdo6bdd7bw8/Table_RandomInfoMiddle.mat/file
单词由“类型”标准表示,即“字母”。需要注意的关键是表中并非所有内容都是单词,并且条目“”注册为单词。换句话说,我需要通过只计算“字母”来确定单词的数量,除非它是“缺失的”。
这是我的尝试(但不成功 - 请注意“问题区域”的两次提及):
for col=1:size(Table_RandomInfoMiddle,2)
column_name = sprintf('Words count for column %d',col);
MiddleWordsType_table.(column_name) = nnz(ismember(Table_RandomInfoMiddle(:,col).Variables,{'letters'}));
MiddleWordsExclusionType_table.(column_name) = nnz(ismember(Table_RandomInfoMiddle(:,col).Variables,{'<missing>'})); %Problem area
end
%Call data from table
MiddleWordsType = table2array(MiddleWordsType_table);
MiddleWordsExclusionType = table2array(MiddleWordsExclusionType_table); %Problem area
%Take out zeros where "Type" was
MiddleWordsTotal_Nr = MiddleWordsType(MiddleWordsType~=0);
MiddleWordsExclusionTotal_Nr = MiddleWordsExclusionType(MiddleWordsExclusionType~=0);
%Final answer
FinalMiddleWordsTotal_Nr = MiddleWordsTotal_Nr-MiddleWordsExclusionTotal_Nr;
任何帮助将不胜感激。谢谢!
【问题讨论】:
-
N = numel( unique( tbl{ ismember(tbl{:,2}, 'letters'), 1 ) );之类的内容是否能让您亲近?有或没有unique,因为不清楚这是否是一个要求......请提供一个简单的输入minimal reproducible example(我们可以使用,而不是图像!)和预期的输出 -
<missing>是分类数组中的关键字,而不是字符串"<missing>",虽然我不知道您的数据类型,但我认为这就是问题所在。这就是为什么它在工作区中显示为蓝色并斜体。如果要专门检查缺失值,可以使用ismissing( Table_RandomInfoMiddle{:,1} )而不是ismember。 -
我已将我的 cmets 转换为正确的答案,因此您可以标记为已接受(如果您愿意,还可以投票)。我不清楚您对第 4 行的预期输出是什么 - 它意味着什么?您正在尝试为整个列分配一个值(缺少的行数) - 您是否只想摆脱
nnz以便该列对于数据是否丢失是真/假?跨度> -
“不工作”是什么意思?您有错误消息或错误的结果?只是您需要使用大括号而不是括号吗?
nnz(ismissing(Table_RandomInfoMiddle{:,col})) -
您需要使列名没有空格,手动执行此操作或将
matlab.lang.makeValidName( __ )换行。列名遵循与变量名相同的规则
标签: string matlab datatable count