car*_*rol 6 string r numeric na
我有一个看起来像这样的数据集:
before = data.frame(diag1 = c(1,NA, 1, NA, NA, 1), diag2 = c(NA, NA, NA, 2, NA, NA), diag3 = c(3, NA, NA, NA, 3, 3), diag4 = c(4, 4, NA, NA, 4, NA))
diag1 diag2 diag3 diag4
1 1 NA 3 4
2 NA NA NA 4
3 1 NA NA NA
4 NA 2 NA NA
5 NA NA 3 4
6 1 NA 3 NA
Run Code Online (Sandbox Code Playgroud)
我一直在尝试寻找一种解决方案,其中最终结果是一个新列,名为“ diagnoses”,看起来像这样
diagnoses
1 1,3,4
2 4
3 1
4 2
5 3,4
6 1,3
Run Code Online (Sandbox Code Playgroud)
这只是我实际问题的一个小得多的例子。在我正在研究的数据集中,有70多个诊断列,每行不超过3个数值。我尝试过strsplit,单独的,统一的功能。我仍然没有找到一个优雅的解决方案
我已经使用了粘贴功能
dat$diagnoses<- apply( (dat[ , cols]), 1, function(x) paste(na.omit(x),collapse=", ") )
Run Code Online (Sandbox Code Playgroud)
但是,它会产生带有许多逗号的字符串。
我尝试用gsub代替,但仍然无法获得希望的结果。
这是我已经得到的输出: "1,,3,4,," ",,,4,," " 1,,,,," ",2,,,," ",,3,4,," "1,,3,,,"
一个选项是使用 循环遍历行apply,将NA元素和paste它一起删除
before$new <- apply(before, 1, function(x) toString(x[!is.na(x)]))
before$new
#[1] "1, 3, 4" "4" "1" "2" "3, 4" "1, 3"
Run Code Online (Sandbox Code Playgroud)