【问题标题】:MATLAB: Count string occurrences in table columnsMATLAB:计算表列中出现的字符串
【发布时间】: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(我们可以使用,而不是图像!)和预期的输出
  • &lt;missing&gt; 是分类数组中的关键字,而不是字符串"&lt;missing&gt;",虽然我不知道您的数据类型,但我认为这就是问题所在。这就是为什么它在工作区中显示为蓝色并斜体。如果要专门检查缺失值,可以使用ismissing( Table_RandomInfoMiddle{:,1} ) 而不是ismember
  • 我已将我的 cmets 转换为正确的答案,因此您可以标记为已接受(如果您愿意,还可以投票)。我不清楚您对第 4 行的预期输出是什么 - 它意味着什么?您正在尝试为整个列分配一个值(缺少的行数) - 您是否只想摆脱 nnz 以便该列对于数据是否丢失是真/假?跨度>
  • “不工作”是什么意思?您有错误消息或错误的结果?只是您需要使用大括号而不是括号吗? nnz(ismissing(Table_RandomInfoMiddle{:,col}))
  • 您需要使列名没有空格,手动执行此操作或将matlab.lang.makeValidName( __ ) 换行。列名遵循与变量名相同的规则

标签: string matlab datatable count


【解决方案1】:

当第 2 列满足某些条件时,您可以从第 1 列获取唯一值

MiddleWordsType = numel( unique( ...
   Table_RandomInfoMiddle{ismember(Table_RandomInfoMiddle{:,2}, 'letters'), 1} ) );

&lt;missing&gt; 是分类数组中的关键字,而不是字符串"&lt;missing&gt;"。这就是它在工作区中显示为蓝色和斜体的原因。如果你想专门检查缺失值,你可以用这个代替ismember

ismissing( Table_RandomInfoMiddle{:,1} ) 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-06
    • 2014-08-22
    • 2016-01-03
    • 2019-06-03
    • 1970-01-01
    • 2020-12-10
    相关资源
    最近更新 更多