我有一个大型数据集x,由16201 x 49个单元组成,第一行包含标签,例如:
'Entry1label' 'Entry2label', 'Entry3label', 'Entry4label'
'stimuli 1' 'stimuli 2' 0.1 10
'stimuli 1' 'stimuli 3' 0.1 10
'stimuli 2' 'stimuli 1' 0.1 40
第4列由值为10,20,40或60的单元格组成。所有列都有重复的条目(但列中有不同的组合)。我想过滤所有条目的单元格数组,例如' Entry4label',等于例如10。 我试过了:
x([x{2:end, 4}] == 10, :)
然而,这几乎可以起作用,每20个细胞就有一个值为40的细胞!类似地,如果我尝试20,我会得到10的虚假出现。如果我使用40,我会得到20的虚假出现,最后到60我得到一些(但很少),40s。
知道发生了什么事吗?
答案 0 :(得分:2)
<强>代码强>
out = x(find(cell2mat(x(2:end,4))== 10)+ 1,:)
<强>输出强>
out =
'stimuli 1' 'stimuli 2' [0.1] [10]
'stimuli 1' 'stimuli 3' [0.1] [10]
问题是第一个元素是第四列的字符串。
答案 1 :(得分:2)
此处:x([x{2:end, 4}] == 10, :)
因为您要在列的子集中找到位置,所以它实际上将行偏移一。我猜你在那一列中的值大多是偶然的变化,因此它看起来好像匹配了大部分。
你可以把偏移量放回去:
x(find([x{2:end, 4}]==40)+1,:)