所以我有一个非常简单的 20k 行和 6 列的数据框,其中最后一列是一个数字,我想提取仅包含该数字 == 21 的行。非常简单的任务。但是,当我在 Excel 中进行列过滤时,它会返回很多行,其中不仅包含这个数字。
如果我用文本编辑器打开 csv 文件,它看起来非常好。
Gene,C,Z,Pval,FDR,Module
DNAH12,0.3628060037231064,617.990756638713,0.0,0.0,1.0
ABCA13,0.33464085936971066,569.9951132122194,0.0,0.0,1.0
PRB4,0.3353517120266698,566.667077873011,0.0,0.0,2.0
RP1,0.31793884623691454,544.7152358537128,0.0,0.0,1.0
CFAP299,0.3137380915326569,537.1739281421044,0.0,0.0,1.0
我切换到 R。我明白了。
Gene C Z Pval FDR Module
1 DNAH12 0.3628060 617.9908 0 0 1
2 ABCA13 0.3346409 569.9951 0 0 1
3 PRB4 0.3353517 566.6671 0 0 2
4 RP1 0.3179388 544.7152 0 0 1
5 CFAP299 0.3137381 537.1739 0 0 1
6 DMBT1 0.3065342 518.7397 0 0 2
> table(df$Module)[22]
21
331
> nrow(df[df$Module==21,])
[1] 20556
看到了吗?本来我应该有 331 个项目,但现在我有 20556 个。然后我尝试使用 Linux 命令行提取它。下面简单的代码。然后我得到了一个包含 2132 行的新文件。现在我完全不知道我的笔记本电脑发生了什么。今天下午是完全正常的,然后今晚就这样了。我还尝试重新启动我的笔记本电脑。结果保持不变。我现在完全困惑为什么会发生这种事......
grep '21.0' /Users/jiajia/Desktop/hotspot_results.csv > /Users/jiajia/Desktop/module21.csv
我使用的是 MacBook 2018 Intel,系统 13.6.6。有人遇到过类似的问题吗?
为了扩展@rawr 的评论,当您进行逻辑比较(如
==
)并且一侧丢失(NA
)时,它会返回结果的 NA
。 当您使用 NA
进行索引时,它会返回 NA
元素或行。
这是一个快速而简短的示例来说明这一点:
> mydf <- data.frame(x=1:5, Module=c(1, 21, 21, NA, NA))
> mydf[mydf$Module==21,]
x Module
2 2 21
3 3 21
NA NA NA
NA.1 NA NA
因此,虽然我们想要的计数是 2,但结果有 4 行,因为有 2 行包含 NA。 我们也可以通过检查缺失来获得正确的子集:
> mydf[!is.na(mydf$Module) & mydf$Module==21,]
x Module
2 2 21
3 3 21
你也可以通过做一个逻辑比较表来看到这一点:
> table(mydf$Module==21, useNA='ifany')
FALSE TRUE <NA>
1 2 2
使用您的数据尝试上述任一方法,看看是否可以解决您的问题。