将因子的级别转换为数据帧中的新因子

时间:2018-06-06 23:55:25

标签: r dataframe

我的数据格式为

public EditPatientViewModel (IPersistenceService svc) {}

我想对其进行转换,以便为每个变量中的“是”响应分配变量的名称(DF <- data.frame(V1 = factor(c("Yes", "No", "Yes", "No")), V2 = factor(c("Yes", "No", "No", "Yes")), V3 = factor(c("No", "Yes", "No", "No"))) V1V2)然后移动到新变量,而“否”回答变为V3。生成的数据框应如下所示:

NA

如何做到这一点?

3 个答案:

答案 0 :(得分:3)

很大程度上是@ 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>

答案 1 :(得分:2)

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>

答案 2 :(得分:2)

在基地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>