我在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]