我有以下二分法回答的变量
Brand1 Brand2
1 1
0 1
1 1
1 0
0 1
我需要重组以输出如下所示的新变量
Var1 Var2
Brand1 Brand2
Brand2 NA
Brand1 Brand2
Brand1 NA
Brand2 NA
对于第1行,受访者仅选择了Brand1和Brand2,对于第2行,受访者仅选择了Brand 2,则只有第一个具有我们价值的变量,第二个变为None。我的变量超过1000,我以2个变量为例
答案 0 :(得分:0)
我试图为此找到一个明智的答案,但事实证明我并不那么聪明;-)
这是一次尝试
对于每一列,首先使用lapply
df[] <- lapply(names(df), function(x) ifelse(df[[x]] == 1, x, NA))
df
# Brand1 Brand2
#1 Brand1 Brand2
#2 <NA> Brand2
#3 Brand1 Brand2
#4 Brand1 <NA>
#5 <NA> Brand2
如果通过在行尾移动NA
重新排列数据很重要,我们可以使用apply
as.data.frame(t(apply(df,1,function(x) c(x[!is.na(x)],x[is.na(x)]))))
# V1 V2
#1 Brand1 Brand2
#2 Brand2 <NA>
#3 Brand1 Brand2
#4 Brand1 <NA>
#5 Brand2 <NA>
答案 1 :(得分:0)
t(apply(df, 1, function(x) names(df)[as.logical(x)][1:length(x)]))
[,1] [,2]
[1,] "Brand1" "Brand2"
[2,] "Brand2" NA
[3,] "Brand1" "Brand2"
[4,] "Brand1" NA
[5,] "Brand2" NA
数据:
df <- structure(list(Brand1 = c(1L, 0L, 1L, 1L, 0L), Brand2 = c(1L,
1L, 1L, 0L, 1L)), row.names = c(NA, -5L), class = "data.frame")