Преобразование уровней фактора в новый фактор в кадре данных - PullRequest
0 голосов
/ 07 июня 2018

У меня есть фрейм данных в формате

DF <- data.frame(V1 = factor(c("Yes", "No", "Yes", "No")),
                 V2 = factor(c("Yes", "No", "No", "Yes")),
                 V3 = factor(c("No", "Yes", "No", "No")))

Я хочу преобразовать его так, чтобы ответам «Да» в каждой переменной было присвоено имя переменной (V1, V2 и V3) и затем перемещается в новую переменную, в то время как ответы «Нет» становятся NA.Результирующий кадр данных должен выглядеть следующим образом:

DF_result <- data.frame(V1 = factor(c("Yes", "No", "Yes", "No")),
                    V2 = factor(c("Yes", "No", "No", "Yes")),
                    V3 = factor(c("No", "Yes", "No", "No")),
                    V_comb = factor(c("V1", NA, "V1", NA, "V2", NA, NA, "V2", NA, "V3", NA, NA)))

Как это можно сделать?

Ответы [ 3 ]

0 голосов
/ 07 июня 2018

В базе R

DF2 <- data.frame(DF,V_comb= c(as.matrix(DF)))
DF2$V_comb <- ifelse(DF2$V_comb == "Yes", rep(names(DF),each=nrow(DF)),NA)
DF2
#     V1  V2  V3 V_comb
# 1  Yes Yes  No     V1
# 2   No  No Yes   <NA>
# 3  Yes  No  No     V1
# 4   No Yes  No   <NA>
# 5  Yes Yes  No     V2
# 6   No  No Yes   <NA>
# 7  Yes  No  No   <NA>
# 8   No Yes  No     V2
# 9  Yes Yes  No   <NA>
# 10  No  No Yes     V3
# 11 Yes  No  No   <NA>
# 12  No Yes  No   <NA>
0 голосов
/ 07 июня 2018

Во многом это вариант ответа @ Moody_Mudskipper, но вы можете сделать:

cbind(DF, V_comb=c(ifelse(DF=="Yes", names(DF)[col(DF)], NA)))

#    V1  V2  V3 V_comb
#1  Yes Yes  No     V1
#2   No  No Yes   <NA>
#3  Yes  No  No     V1
#4   No Yes  No   <NA>
#5  Yes Yes  No     V2
#6   No  No Yes   <NA>
#7  Yes  No  No   <NA>
#8   No Yes  No     V2
#9  Yes Yes  No   <NA>
#10  No  No Yes     V3
#11 Yes  No  No   <NA>
#12  No Yes  No   <NA>
0 голосов
/ 07 июня 2018
cbind(DF,comb=c(mapply(factor,DF,label=rbind.data.frame(NA,names(DF)))))
    V1  V2  V3 comb
1  Yes Yes  No   V1
2   No  No Yes <NA>
3  Yes  No  No   V1
4   No Yes  No <NA>
5  Yes Yes  No   V2
6   No  No Yes <NA>
7  Yes  No  No <NA>
8   No Yes  No   V2
9  Yes Yes  No <NA>
10  No  No Yes   V3
11 Yes  No  No <NA>
12  No Yes  No <NA>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...