总频率然后删除行

时间:2018-07-15 11:58:16

标签: 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), 
                       events=c(1, 1, 0, 1, 1, 0, 0, 0))

我想要的是

事件总数小于1时删除城市。换句话说,如果伦敦和柏林没有任何事件,我希望对伦敦和柏林的所有观察都消失。

实际上,我有一个庞大的数据集,因此仅删除第x行将是不可取的。

我已经尝试过了

data2 <- aggregate(data$events, by=list(country=data$country), FUN=sum)

但是(按预期)这汇总了数据,因此我失去了其他预测因素和观察结果。

如果我能摆脱那些城市而又不失去我的其他预测指标(评估),那将是很好的。

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

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