使用R中的条件对数据框中的特定组进行排序

时间:2019-04-24 11:05:41

标签: r

我需要帮助才能将我的数据框分为几组,这是数据框:

Group_name  Event   colomn1 colomn2 colomn3 colomn4
Group1  1   1   1   1   0
Group1  2   2   2   4   2
Group1  3   2   2   4   2
Group2  1   6   6   6   0
Group3  1   2   2   2   0
Group3  2   2   2   2   0
Group4  1   2   2   5   3
Group4  2   2   2   2   0

我想保留colomn4值= 0的组并删除其他组:

所以我应该得到:

Group_name  Event   colomn1 colomn2 colomn3 colomn4
Group2  1   6   6   6   0
Group3  1   2   2   2   0
Group3  2   2   2   2   0

您有想法在R中做到吗?

2 个答案:

答案 0 :(得分:4)

使用dplyr,您可以执行以下操作:

df %>%
 group_by(Group_name) %>%
 filter(all(colomn4 == 0))

  Group_name Event colomn1 colomn2 colomn3 colomn4
  <chr>      <int>   <int>   <int>   <int>   <int>
1 Group2         1       6       6       6       0
2 Group3         1       2       2       2       0
3 Group3         2       2       2       2       0

或与base R相同:

df[with(df, ave(colomn4, Group_name, FUN = function(x) all(x == 0))) == 1, ]

  Group_name Event colomn1 colomn2 colomn3 colomn4
4     Group2     1       6       6       6       0
5     Group3     1       2       2       2       0
6     Group3     2       2       2       2       0

或者:

df[as.logical(with(df, ave(colomn4, Group_name, FUN = function(x) all(x == 0)))), ]

或者(由@Ronak Shah提议):

df[with(df, ave(colomn4 == 0, Group_name, FUN = all)), ]

答案 1 :(得分:1)

使用基数R,您可以执行以下操作:

data[ave(data$colomn4, data$Group_name, FUN = sum) == 0,]

  Group_name Event colomn1 colomn2 colomn3 colomn4
4     Group2     1       6       6       6       0
5     Group3     1       2       2       2       0
6     Group3     2       2       2       2       0

或带有data.table

DT <- as.data.table(data)
DT[, exclude := all(colomn4 == 0), by = Group_name][(exclude)]