R 求和频率,然后删除行

R 求和频率,然后删除行,r,R,我制作了一个示例数据框,它表示具有特定评级的特定城市中的事件数量 data <- data.frame(country=c("Amsterdam", "Amsterdam", "Amsterdam", "New York", "New York", "London", "London", "Berlin"), rating=c(0.5, 0.4, 0.6, 0.3, 0.4, 0.8, 0.3, 0.3),

我制作了一个示例数据框,它表示具有特定评级的特定城市中的事件数量

data <- data.frame(country=c("Amsterdam", "Amsterdam", "Amsterdam", "New York", "New York", "London", "London", "Berlin"), 
                       rating=c(0.5, 0.4, 0.6, 0.3, 0.4, 0.8, 0.3, 0.3), 
                       events=c(1, 1, 0, 1, 1, 0, 0, 0))

data您可以使用
tidyverse
包按事件总和过滤数据

library(tidyverse)
data %>% 
  group_by(country) %>%
  filter(sum(events) > 0)

您可以使用
tidyverse
包按事件总和过滤数据

library(tidyverse)
data %>% 
  group_by(country) %>%
  filter(sum(events) > 0)
数据表解决方案:

library(data.table)

data <- as.data.table(data)
data[, .SD[sum(events) > 0], by = country]
     country rating events
1: Amsterdam    0.5      1
2: Amsterdam    0.4      1
3: Amsterdam    0.6      0
4:  New York    0.3      1
5:  New York    0.4      1
库(data.table)
数据0],按=国家]
国家评级活动
1:阿姆斯特丹0.51
2:阿姆斯特丹0.4 1
3:阿姆斯特丹0.60
4:纽约0.31
5:纽约0.41
A data.table解决方案:

library(data.table)

data <- as.data.table(data)
data[, .SD[sum(events) > 0], by = country]
     country rating events
1: Amsterdam    0.5      1
2: Amsterdam    0.4      1
3: Amsterdam    0.6      0
4:  New York    0.3      1
5:  New York    0.4      1
库(data.table)
数据0],按=国家]
国家评级活动
1:阿姆斯特丹0.51
2:阿姆斯特丹0.4 1
3:阿姆斯特丹0.60
4:纽约0.31
5:纽约0.41

try
data[with(data,ave(events,country,FUN=function(i)sum(i))>0]。
!非常感谢你!尝试
data[data,ave(events,country,FUN=function(i)sum(i))>0]
成功了!非常感谢你!