【问题标题】:Merge two columns of data table on condition [duplicate]根据条件合并两列数据表[重复]
【发布时间】:2021-09-01 08:30:24
【问题描述】:

我想用 R 解决以下问题:

我有一个数据表,其中包含来自两个实验室的值:lab1lab2lab1lab2 可能包含 NA 值,因此“lab3”列应包含非 NA 值。如果lab1lab2包含NAs当然lab3也是NA,但是如果lab1lab2包含值,lab3应该应用lab2的值(这是“更重要的”实验室)。

例子:

lab1     lab2     lab3
5        7        7       < lab 3 contains the value of lab 2 (because more important)
8        10       10      < lab 3 contains the value of lab 2 (because more important)
NA       3        3       < lab 3 contains the value of lab 2, because lab 1 is NA
9        NA       9       < lab 3 contains the value of lab 1, because lab 2 is NA
NA       NA       NA      < lab 3 contains NA, because lab 1 and lab 2 contain NA

我找到了函数 coalesce (dplyr),但我无法定义 lab2 的首要重要性(超过 lab1)。

感谢您的帮助!

【问题讨论】:

  • “首要重要性”由列的顺序设置。

标签: r data.table


【解决方案1】:

如果你正在使用data.table,你可以试试fcoalesce

> setDT(df)[, lab3 := fcoalesce(lab2, lab1)][]
   lab1 lab2 lab3
1:    5    7    7
2:    8   10   10
3:   NA    3    3
4:    9   NA    9
5:   NA   NA   NA

【讨论】:

    【解决方案2】:

    这可能有效。

    df %>%
      mutate(lab3 = ifelse(!is.na(lab2), lab2, lab1))
    
       lab1  lab2  lab3
      <dbl> <dbl> <dbl>
    1     5     7     7
    2     8    10    10
    3    NA     3     3
    4     9    NA     9
    5    NA    NA    NA
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-10
      • 1970-01-01
      • 2021-09-18
      • 2021-12-31
      • 1970-01-01
      • 2020-10-20
      • 1970-01-01
      相关资源
      最近更新 更多