【问题标题】:remove a group of inputs in a column based on a single input in a separate column in r [duplicate]基于r中单独列中的单个输入删除列中的一组输入[重复]
【发布时间】:2019-09-11 22:29:09
【问题描述】:

这是一个数据框:

 df <- data.frame(letter = rep(c("a","b","c","d"), each = 4), number = c(2,1,5,3,9,4,2,4,3,11,1,2,1,1,5,6))

我知道如何根据观察结果删除行:

rmv <- with(df, number > 8) # finds observations greater than 8
new.df<- df[!rmv, ] # removes observations

但是,如果有任何大于 8 的观察值,我想删除每个字母组的所有输入(即所有“b”和“c”输入)。理想的输出是:

      letter number
 1       a      2
 2       a      1
 3       a      5
 4       a      3
 13      d      1
 14      d      1
 15      d      5
 16      d      6

我将如何做到这一点?

【问题讨论】:

    标签: r dataframe


    【解决方案1】:

    我们可以用any, negate (!) by 'letter' 分组后

    library(dplyr)
    df %>% 
       group_by(letter) %>% 
       filter(!any(number > 8))
    

    或者用all做相反的事情

    df %>%
       group_by(letter) %>%
       filter(all(number <= 8))
    

    base R 中,这可以通过ave 完成

    df[with(df, ave(number <= 8, letter, FUN = all)),]
    

    【讨论】:

    • filter(max(number) &lt;= 8)
    猜你喜欢
    • 1970-01-01
    • 2019-12-16
    • 1970-01-01
    • 2021-01-31
    • 1970-01-01
    • 2012-05-19
    • 1970-01-01
    • 2016-12-02
    • 2017-02-20
    相关资源
    最近更新 更多