代码之家  ›  专栏  ›  技术社区  ›  Thundersheep

求和频率,然后删除行

r
  •  0
  • Thundersheep  · 技术社区  · 6 年前

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

    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 回复  |  直到 6 年前
        1
  •  1
  •   Richard Telford    6 年前

    你可以 tidyverse 按事件总数筛选数据的包

    library(tidyverse)
    data %>% 
      group_by(country) %>%
      filter(sum(events) > 0)
    
        2
  •  1
  •   phiver    6 年前

    数据表解决方案:

    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