我的问题与这篇文章和这篇文章有很强的相似之处,但我的数据集有点不同,我似乎无法让这些解决方案起作用。如果我误解了什么并且这个问题是多余的,请原谅我。
注意,除了这些列之外,我还有很多其他的列不应受当前操作的影响。
因此,我观察到条件A、条件B、条件C和条件D是互斥的,最好将它们作为单个类别变量呈现,即“factor”,应该像这样:
我的数据集如下所示:
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
注意,除了这些列之外,我还有很多其他的列不应受当前操作的影响。
因此,我观察到条件A、条件B、条件C和条件D是互斥的,最好将它们作为单个类别变量呈现,即“factor”,应该像这样:
# id type
# 1 1 conditionA
# 2 2 conditionB
# 3 3 conditionC
# 4 4 conditionD
# 5 5 conditionA
我进行了调查,使用tidyr
中的gather
或unite
方法并不能解决这个问题(使用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
我尝试了第二个问题中的其他建议,但没有找到一个能带给我预期结果的。
NA
/1
而不是0
/1
没有任何优点,至少我不知道有。最近在SO上我看到了很多这样的情况。 - Frank