If组包含值逻辑R

If组包含值逻辑R,r,if-statement,dplyr,R,If Statement,Dplyr,我试图根据一定的标准来确定年龄。例如,如果RNA不是空的,那么我希望将化身与当前RNA条目相关联的最小年龄相关联。但是,如果是NA,我想取DNA不为空的最小年龄。如果两者都为null,则删除 输入: 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

我试图根据一定的标准来确定年龄。例如,如果RNA不是空的,那么我希望将化身与当前RNA条目相关联的最小年龄相关联。但是,如果是NA,我想取DNA不为空的最小年龄。如果两者都为null,则删除

输入:

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
您可以尝试:

library(dplyr)

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

与输出不同的顺序,但这是否有效

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
库(dplyr)
我的_数据%>%
过滤器(!is.na(DNA)|!is.na(RNA))%>%
分组依据(ID,DNA)%>%
排列(DNA,-年龄)%>%
切片(n())
ID-DNA-RNA年龄
1 2 SL333 SL43.7
2 NA SL43 22.2
3 5 NA SL43 23.3
4 6 SL333 NA 10.3
5 7 SL333 SL43 13.5