我制作了一个示例数据框,表示具有特定等级的特定城市中的事件数量。
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)
但是(按预期)这汇总了数据,因此我失去了其他预测因素和观察结果。
如果我能摆脱那些城市而又不失去我的其他预测指标(评估),那将是很好的。
任何帮助将不胜感激。
答案 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