我有一个数据框“ 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_to
和death_days_to
,结果中它应该只显示值,而不显示任何其他字符。并且,如果两列都包含字符,则应删除整行。
结果应如下所示:
Samples Status new_column
Sample2 Dead 724
Sample3 Dead 1624
Sample4 Alive 1569
Sample5 Dead 2532
Sample6 Dead 1271
答案 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