【发布时间】:2014-06-17 09:30:57
【问题描述】:
我想对我这样做的数据框进行子集化:
test = genes_names %in% annot2$Short_Name_Sc
summary(test) # 3140 rows to subset
## Mode FALSE TRUE NA's
## logical 2146 3140 0
test2 = annot2[test, 1]
nrow(annot2)
## [1] 5371
nrow(test2)
## [1] 3195 # There are 55 rows unexpected
令我惊讶的是,test2 对象在 test 向量中的行数比 TRUEs 多。我认为这可能是[] 的子集。
我尝试使用子集:
probe = subset(annot2, test, 1)
但它的行数与前面的代码相同。有什么解释吗?
数据很大,所以我没有发布它,不幸的是我没有设法制作一个可重现的例子。 数据集都是字符:
summary(annot2)
## Probe_ID Short_Name_Sc Systematic_Name_Sc
## Length:5371 Length:5371 Length:5371
## Class :character Class :character Class :character
## Mode :character Mode :character Mode :character
summary(genes_names)
## Length Class Mode
## 5286 character character
【问题讨论】:
-
您的示例完全不可重现。此外,您正在使用genes_names、annot2、test 和annot2?使其可重现或至少显示清晰的思路。
-
也许你想要
test = annot2$Short_Name_Sc %in% genes_names,它将返回一个逻辑向量,指示Short_Name_Sc中的哪个genes_names。 -
@konvas
length(genes_names)[1] 5286 > nrow(annot2)[1] 5371你是对的。这意味着%in%和subset省略了<Na>。我应该在使用&命令进行子集化时这样做。如果您发布答案,我会接受。谢谢