如何根据同时发生的条件移除色谱柱

时间:2019-04-27 06:13:44

标签: r

我只需要删除第一列中具有特定值(例如,sp3和sp5)的行中(从第二个开始)具有不等于0的值的列。 我的数据集很大,但是这里只是一小部分数据。

SP   id2324 id8283  id3912  id3912  id1231...
sp.1    0   2   4   1   0
sp.2    12  10  2   3   15
sp.3    0   0   23  0   4
sp.4    2   2   11  19  0
sp.5    0   0   0   0   3
sp.6    3   1   7   3   0
sp.7    0   14  1   0   12
sp.8    1   0   2   6   6

在这个小例子中,我希望id3912和id1231变量消失。

1 个答案:

答案 0 :(得分:0)

我们可以首先选择SPc("sp.3", "sp.5")的行,然后选择至少一个不等于0的值的列。

cbind(df[1], df[-1][colSums(df[df$SP %in% c("sp.3", "sp.5"), -1] != 0) == 0])


#    SP id2324 id8283 id3912.1
#1 sp.1      0      2        1
#2 sp.2     12     10        3
#3 sp.3      0      0        0
#4 sp.4      2      2       19
#5 sp.5      0      0        0
#6 sp.6      3      1        3
#7 sp.7      0     14        0
#8 sp.8      1      0        6

逐步打破它

选择其中SPc("sp.3", "sp.5")的行

df[df$SP %in% c("sp.3", "sp.5"), -1]
#  id2324 id8283 id3912 id3912.1 id1231
#3      0      0     23        0      4
#5      0      0      0        0      3

查找值不等于0的单元格

df[df$SP %in% c("sp.3", "sp.5"), -1] != 0
#  id2324 id8283 id3912 id3912.1 id1231
#3  FALSE  FALSE   TRUE    FALSE   TRUE
#5  FALSE  FALSE  FALSE    FALSE   TRUE

查找所有值均为0的列

colSums(df[df$SP %in% c("sp.3", "sp.5"), -1] != 0) == 0

#  id2324   id8283   id3912 id3912.1   id1231 
#    TRUE     TRUE    FALSE     TRUE    FALSE 

然后我们选择第一列为TRUEcbind的列。