如何在R中的数据框中合并两列?

时间:2018-08-07 12:46:23

标签: r dataframe

我有一个数据框“ df”,如下所示:

Samples Status  last_contact_days_to    death_days_to
Sample1 Alive   [Not Available]       [Not Applicable]
Sample2 Dead    [Not Available]             724
Sample3 Dead    [Not Available]            1624
Sample4 Alive      1569               [Not Applicable]
Sample5 Dead    [Not Available]            2532
Sample6 Dead    [Not Available]            1271

我想合并列last_contact_days_todeath_days_to,结果中它应该只显示值,而不显示任何其他字符。并且,如果两列都包含字符,则应删除整行。

结果应如下所示:

Samples Status  new_column
Sample2 Dead    724
Sample3 Dead    1624
Sample4 Alive   1569
Sample5 Dead    2532
Sample6 Dead    1271

1 个答案:

答案 0 :(得分:5)

我们可以将[Not Available][Not Applicable]更改为NA并使用coalesce

library(tidyverse)
df1 %>%
   mutate_at(3:4, 
      funs(replace(., .%in% c("[Not Available]", "[Not Applicable]"), NA))) %>%
   transmute(Samples, Status,
             new_column = coalesce(last_contact_days_to, death_days_to)) %>%
   filter(!is.na(new_column))
#  Samples Status new_column
#1 Sample2   Dead        724
#2 Sample3   Dead       1624
#3 Sample4  Alive       1569
#4 Sample5   Dead       2532
#5 Sample6   Dead       1271

注意:如@Roland所建议,如果第3列和第4列除了'[Not Available]','[Not Applicable]'之外仅具有数字值,则可以将mutate_at更改为{ {1}}。它将以友好的警告将所有非数字元素转换为as.numeric,并且不会有任何问题

NA

注意:在OP的数据集中,这些是df1 %>% mutate_at(3:4, as.numeric) # if the columns are `factor` class then wrap with `as.character` # mutate_at(3:4, funs(as.numeric(as.character(.)))) 类。因此,取消注释上面的代码并使用它,而不是直接应用factor

数据

as.numeric