r - 是否有 R 函数仅从具有许多 NA 值的逗号分隔字符串中提取数字以创建仅包含数字的列?

标签 r string na numeric

我有一个看起来像这样的数据集:

 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

我一直试图找到一个解决方案,其中最终结果是一个名为“诊断”的新列,看起来像这样
  diagnoses
1     1,3,4
2         4
3         1
4         2
5       3,4
6       1,3

这只是我真正问题的一个小得多的例子。在我正在处理的数据集中,有超过 70 列诊断,每行不超过 3 个数值。我尝试过 strsplit、separate、unite 函数。我还没有找到优雅的解决方案

我使用了应用粘贴功能
dat$diagnoses<- apply( (dat[ , cols]), 1, function(x) paste(na.omit(x),collapse=", ") )

但是,它会生成一个包含许多逗号的字符串。

我尝试用 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"   

关于r - 是否有 R 函数仅从具有许多 NA 值的逗号分隔字符串中提取数字以创建仅包含数字的列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57894017/

相关文章:

r - 只有 .R 文件中的源函数

c - 查找字符串中重复的单词和它们之间的符号

R:减少功能。钠处理

c# - 为什么要使用 String.Equals 而不是 ==?

r - 从字符串中计算 NA_integer_

r - 从某些值不适用的数据框中删除列

r - hist 函数将 "zero"和 "1"值聚合到一个 bin 中。

javascript - 使用R自动读取用javascript编写的动态表的内容

r - 根据日期和预定义值有条件地改变新列 - data.table

Mysql group by 包含空格作为相同的值