【问题标题】:Deleting grouped row with other value than desired value删除具有其他值而不是所需值的分组行
【发布时间】:2021-01-21 02:15:49
【问题描述】:

有没有办法删除变量id 和其他dx 而不是“I10”?

id            dx
1      I10, E70
2           I10
2           I10
3      I10, J15
3      I10, Z50
3      I10, B24
3           I10
4           I10
4           I10
5      I10, Z80
6           I10
7      B65, I10
7 H58, J30, I10
7      M24, I10
8           I10
8           I10

结果应该是这样的。它应该只有 iddx 作为“I10”。

id            dx
2           I10
2           I10
4           I10
4           I10
6           I10
8           I10
8           I10

【问题讨论】:

    标签: r function dplyr


    【解决方案1】:

    您可以选择所有值为'I10'的id

    使用dplyr

    library(dplyr)
    df %>% group_by(id) %>% filter(all(dx == 'I10'))
    
    #     id dx   
    #  <int> <chr>
    #1     2 I10  
    #2     2 I10  
    #3     4 I10  
    #4     4 I10  
    #5     6 I10  
    #6     8 I10  
    #7     8 I10  
    

    基础R:

    subset(df, ave(dx == 'I10', id, FUN = all))
    

    data.table

    library(data.table)
    setDT(df)[, .SD[all(dx == 'I10')], id]
    

    如果要过滤多个值,最好将逗号分隔的值分成不同的行。

    values_to_filter <- c("I10", "E70")
    
    df %>%
      mutate(row = row_number()) %>%
      tidyr::separate_rows(dx, sep = ',\\s*') %>%
      group_by(id) %>%
      filter(all(dx %in% values_to_filter)) %>%
      group_by(row, id) %>%
      summarise(dx = toString(dx)) %>%
      ungroup() %>%
      select(-row)
    
    #     id dx      
    #  <int> <chr>   
    #1     1 I10, E70
    #2     2 I10     
    #3     2 I10     
    #4     4 I10     
    #5     4 I10     
    #6     6 I10     
    #7     8 I10     
    #8     8 I10     
    

    数据

    df <- structure(list(id = c(1L, 2L, 2L, 3L, 3L, 3L, 3L, 4L, 4L, 5L, 
    6L, 7L, 7L, 7L, 8L, 8L), dx = c("I10,E70", "I10", "I10", "I10,J15", 
    "I10,Z50", "I10,B24", "I10", "I10", "I10", "I10,Z80", "I10", 
    "B65,I10", "H58,J30,I10", "M24,I10", "I10", "I10")), 
    class = "data.frame", row.names = c(NA, -16L))
    

    【讨论】:

    • 非常感谢!如果我想将“id”与“dx”包含在“I10”或“E70”中,结果数据也会包含“id”1怎么办?
    猜你喜欢
    • 2021-05-30
    • 1970-01-01
    • 2021-11-21
    • 2018-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-26
    • 2012-04-17
    相关资源
    最近更新 更多