如何在R中有条件地删除行?

时间:2016-03-14 10:38:30

标签: r

如果条件匹配,我想删除某些行组。例如

Group  X1  X2  X3
1      0.2  1   2
1      0.8  2   4
1      0.0  1   2
2      0.4  1   3
2      0.2  2   3
2      0.3  2   4
2      0.1  1   2
3      0.5  4   2
3      0.4  1   2
3      0.1  3   1

假设我想删除group-1,因为它包含x1的值'0'。如何删除。

3 个答案:

答案 0 :(得分:2)

我们可以使用data.table

library(data.table)
setDT(df1)[,  if(!any(!X1)) .SD,by = Group]

或使用dplyr

library(dplyr)
df1 %>%
     group_by(Group) %>%
     filter(!any(!X1))

答案 1 :(得分:1)

你可以在基础R中轻松完成,不需要像这样分组:

# check in which groups X1 == 0 appears:
groups_to_remove <- unique(df$Group[df$X1 == 0])
# just to double check the result:
groups_to_remove
#[1] 1
# remove those groups from data:
df[!df$Group %in% groups_to_remove, ]
#   Group  X1 X2 X3
#4      2 0.4  1  3
#5      2 0.2  2  3
#6      2 0.3  2  4
#7      2 0.1  1  2
#8      3 0.5  4  2
#9      3 0.4  1  2
#10     3 0.1  3  1

如果您更喜欢“单行”,可以使用例如:

subset(df, !Group %in% unique(Group[X1 == 0]))
#   Group  X1 X2 X3
#4      2 0.4  1  3
#5      2 0.2  2  3
#6      2 0.3  2  4
#7      2 0.1  1  2
#8      3 0.5  4  2
#9      3 0.4  1  2
#10     3 0.1  3  1

答案 2 :(得分:0)

首先使用data.matrix(),然后使用矩阵过滤

x=data.matrix(your data)
x[-((x[,1]==1) & (x[,2]==0)),]