我只需要删除第一列中具有特定值(例如,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变量消失。
答案 0 :(得分:0)
我们可以首先选择SP
是c("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
逐步打破它
选择其中SP
是c("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
然后我们选择第一列为TRUE
和cbind
的列。