我需要帮助才能将我的数据框分为几组,这是数据框:
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中做到吗?
答案 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)]