【问题标题】:If Group Contains Value Logic R如果组包含值逻辑 R
【发布时间】:2021-03-17 23:49:56
【问题描述】:

我正在尝试根据特定标准获取年龄。例如,如果 RNA 不为空,那么我希望 AvatarKey 与与当前 RNA 条目相关的最小年龄相关联。但是,如果它是 NA,我想采用 DNA 不为空的最小年龄。如果两者都为空,则删除。

输入:

ID       DNA     RNA     Age
2        NA      SL43    22.2
2        SL333   NA      55.7
2        SL333   SL43    43.7
6        SL333   NA      10.3
6        SL333   NA      65.6
6        NA      NA      35.5
5        NA      SL43    78.0
5        NA      SL43    23.3
5        NA      SL43    35.8
7        SL333   SL43    13.5
7        SL333   SL43    98.1
1        NA      NA      55.6

期望的输出

ID       DNA     RNA     Age
2        NA      SL43    22.2
2        SL333   SL43    43.7
6        SL333   NA      10.3
5        NA      SL43    23.3
7        SL333   SL43    13.5

【问题讨论】:

    标签: r if-statement dplyr


    【解决方案1】:

    与您的输出不同的顺序,但这有效吗?

    library(dplyr)
    my_data %>%
      filter(!is.na(DNA) | !is.na(RNA)) %>%
      group_by(ID, DNA) %>%
      arrange(DNA, -Age) %>%
      slice(n())
    
         ID DNA   RNA     Age
      <int> <chr> <chr> <dbl>
    1     2 SL333 SL43   43.7
    2     2 NA    SL43   22.2
    3     5 NA    SL43   23.3
    4     6 SL333 NA     10.3
    5     7 SL333 SL43   13.5
    

    【讨论】:

      【解决方案2】:

      你可以试试:

      library(dplyr)
      
      df %>%
        group_by(ID, DNA, RNA) %>%
        summarise(Age = min(Age)) %>%
        ungroup() %>%
        filter(!(is.na(DNA) & is.na(RNA)))
      

      【讨论】:

        猜你喜欢
        • 2022-01-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-07-11
        • 2017-03-25
        • 1970-01-01
        相关资源
        最近更新 更多