我的问题与这个问题和另一个问题有很大的相似之处,但我的数据集有点不同,我似乎无法让这些解决方案发挥作用。如果我误解了什么并且这个问题是多余的,请原谅我。
我有一个这样的数据集:
df <- data.frame(
id = c(1:5),
conditionA = c(1, NA, NA, NA, 1),
conditionB = c(NA, 1, NA, NA, NA),
conditionC = c(NA, NA, 1, NA, NA),
conditionD = c(NA, NA, NA, 1, NA)
)
# id conditionA conditionB conditionC conditionD
# 1 1 1 NA NA NA
# 2 2 NA 1 NA NA
# 3 3 NA NA 1 NA
# 4 4 NA NA NA 1
# 5 5 1 NA NA NA
(请注意,除了这些列之外,我还有很多其他列不应受到当前操作的影响。)
因此,我观察到conditionA
、和是互斥的,应该更好地表示为单个分类变量,即conditionB
应该如下所示:conditionC
conditionD
factor
# id type
# 1 1 conditionA
# 2 2 conditionB
# 3 3 conditionC
# 4 4 conditionD
# 5 5 conditionA
我已经使用gather
or unite
from进行了调查tidyr
,但它与这种情况不对应(使用unite
,我们会丢失变量名中的信息)。
我尝试使用kimisc::coalescence.na
,如第一个参考答案中所建议的那样,但是 1. 我需要首先根据每列的名称设置一个因子值,2. 它不能按预期工作,仅包括第一列:
library(kimisc)
# first, factor each condition with a specific label
df$conditionA <- df$conditionA %>%
factor(levels = 1, labels = "conditionA")
df$conditionB <- df$conditionB %>%
factor(levels = 1, labels = "conditionB")
df$conditionC <- df$conditionC %>%
factor(levels = 1, labels = "conditionC")
df$conditionD <- df$conditionD %>%
factor(levels = 1, labels = "conditionD")
# now coalesce.na to merge into a single variable
df$type <- coalesce.na(df$conditionA, df$conditionB, df$conditionC, df$conditionD)
df
# id conditionA conditionB conditionC conditionD type
# 1 1 conditionA <NA> <NA> <NA> conditionA
# 2 2 <NA> conditionB <NA> <NA> <NA>
# 3 3 <NA> <NA> conditionC <NA> <NA>
# 4 4 <NA> <NA> <NA> conditionD <NA>
# 5 5 conditionA <NA> <NA> <NA> conditionA
我尝试了第二个问题的其他建议,但还没有找到一个能给我带来预期结果的建议......