r语言 - 从多个列中选择任何非 NA 变量,以在新列中变异为统一变量



我在R-Studio中使用tidyverse,并有一个数据框(df(,由多个变量和患者的观察结果组成。
有一些列,包含 7 种不同症状的字符串变量。这些列还包含 NA。一些观测值有多个正变量。 以下是表格的前 10 行和 4 列:

symptom_1      symptom_2      symptom_3      symptom_4
1       <NA>           <NA> SYMPTOM'S NAME SYMPTOM'S NAME
2       <NA> SYMPTOM'S NAME           <NA> SYMPTOM'S NAME
3       <NA>           <NA>           <NA>           <NA>
4       <NA>           <NA>           <NA>           <NA>
5       <NA>           <NA>           <NA>           <NA>
6       <NA>           <NA>           <NA>           <NA>
7       <NA>           <NA>           <NA>           <NA>
8       <NA>           <NA>           <NA>           <NA>
9       <NA>           <NA>           <NA>           <NA>
10      <NA>           <NA>           <NA>           <NA>

我想建立一个新的因子列,包含"阳性"表示那些至少有 1 个变量(症状(的观察值,而"NA"对于包含所有症状的"NA"的病例。 即,对于案例 1 和 2,列应包含"阳性",对于案例 3 到 10,应包含"NA"。 我已经在当前资源中搜索了解决方案,尝试了不同的建议,最接近我期望的结果如下:

df<-
df %>% 
select(symptom_1:symptom_7) %>% 
mutate_if(is.character, funs(any_positive=ifelse(!is.na(.), "Positive", .)))

但是这段代码又产生了 14 列,分别命名为"symptom_1_any_positive"、">symptom_2_any_positive">"symptom_3_any_positive">等等,但不是单一的。 如何解决此问题并将变量突变为仅一列?

提前谢谢你。

我们可以在逻辑矩阵上使用rowSums

nm1 <- grep("^symptom_\d+$", names(df))
df$newcol <- c(NA, "Positive")[(rowSums(!is.na(df[nm1])) > 0) + 1]

如果也有负值,并且想要检查正值

df$newcol <- c(NA, "Positive")[(rowSums(df[nm1] > 0 & !is.na(df[nm1])) >0) + 1]

相关内容

最新更新