选择至少在R中的2列中存在条件的行

选择至少在R中的2列中存在条件的行,r,R,我有一个大数据集,其中有一列基因名称和4列检测方法(在本例中,我称它们为X1、X2、X3和X4)。我想用至少2种检测方法选择基因所在的行。该表的示例如下: 表格: 行基因X1 X2 X3 X4 1A1000 2 A 0 0 1 0 3 A 0 1 0 0 4B00110 5B00110 6C001 7 D 0 0 1 0 8 D 0 1 0 0 9 D 0 1 0 0 10 E 0 0 1 0 11 E 0 0 1 0 总之,我想选择第1、2、3行(方法X1、X2和X3检测到基因A)和第7、8

我有一个大数据集,其中有一列基因名称和4列检测方法(在本例中,我称它们为X1、X2、X3和X4)。我想用至少2种检测方法选择基因所在的行。该表的示例如下:

表格:
行基因X1 X2 X3 X4
1A1000
2 A 0 0 1 0
3 A 0 1 0 0
4B00110
5B00110
6C001
7 D 0 0 1 0
8 D 0 1 0 0
9 D 0 1 0 0
10 E 0 0 1 0
11 E 0 0 1 0
总之,我想选择第1、2、3行(方法X1、X2和X3检测到基因A)和第7、8、9行,其中方法X2和X3检测到基因D


感谢您的帮助。

要显示哪些基因是通过两种或两种以上的方法检测到的,这将起作用

简短版本: 如果
zz
是您的data.frame,则:

yy <- by(zz, zz$Gene, function(dat) {sum(apply(dat[,-c(1,2)], 2, any)) >= 2} )
zz[zz$Gene %in% which(yy),]

给予

给予

所以

给予


您可以使用
rowsum
rowsum
查找具有多个方法的行,并使用%中的
%查找匹配的行

x <- rowSums(rowsum(zz[3:6], zz[,2]) > 0) > 1
zz$Row[zz$Gene %in% names(x[x])]
#[1] 1 2 3 7 8 9
x0)>1
zz$行[zz$基因%在%名称中(x[x])]
#[1] 1 2 3 7 8 9

您能分享一些您已经尝试过的代码吗?通常,您可以只计算每个基因X1:X4的总和,然后在总和大于等于2的行/基因上进行过滤。另一种方法是只计算列“基因”,因为一个基因的出现次数似乎与检测到的次数相同,即基因a检测3次,基因C仅检测一次。请注意,在OP的示例中,应该给出正匹配的基因是a和D,它们的行加起来都是1,而不是2。谢谢Jason!它工作得很好,我只是在%中更改==按%,因为我得到了警告“较长的对象长度不是较短对象长度的倍数”,该警告在%fixedWhoops中为%。复制和粘贴时间错误。谢谢你的帮助。
which(yy)  # equivalent to which(yy == TRUE)
A D 
1 4 
names(which(yy))
[1] "A" "D"
zz[zz$Gene %in% names(which(yy)),]
  Row Gene X1 X2 X3 X4
1   1    A  1  0  0  0
2   2    A  0  0  1  0
3   3    A  0  1  0  0
7   7    D  0  0  1  0
8   8    D  0  1  0  0
9   9    D  0  1  0  0
x <- rowSums(rowsum(zz[3:6], zz[,2]) > 0) > 1
zz$Row[zz$Gene %in% names(x[x])]
#[1] 1 2 3 7 8 9