R 在数据帧中将因子的级别转换为新因子
我有数据帧的格式R 在数据帧中将因子的级别转换为新因子,r,dataframe,R,Dataframe,我有数据帧的格式 DF <- data.frame(V1 = factor(c("Yes", "No", "Yes", "No")), V2 = factor(c("Yes", "No", "No", "Yes")), V3 = factor(c("No", "Yes", "No", "No"))) 如何做到这一点?cbind(DF,comb=c(mapply(factor,DF,label=rbind.data.fra
DF <- data.frame(V1 = factor(c("Yes", "No", "Yes", "No")),
V2 = factor(c("Yes", "No", "No", "Yes")),
V3 = factor(c("No", "Yes", "No", "No")))
如何做到这一点?cbind(DF,comb=c(mapply(factor,DF,label=rbind.data.frame(NA,names(DF '))))
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>
V1 V2 V3梳
1是是否V1
2不,不,是的
3是否否V1
4否是否
5是是否V2
6不,不,是的
7是否否否
8否是否V2
9是是否
10否否否是V3
11是否否否
12否是否
在底部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>
DF2很大程度上是@Moody_mudscappper答案的一个变体,但你可以做到:
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>
cbind(DF,V_comb=c(ifelse(DF==“Yes”,name(DF)[col(DF)],NA)))
#V1 V2 V3 V_梳
#1是是否V1
#2不,不,是的
#3是否否V1
#4否是否
#5是是否V2
#6不,不,是的
#7是否否否
#8否是否V2
#9是是否
#10否否否是V3
#11是否否否
#12否是否
我不明白结果。为什么当V3
为“是”时,第2行为NA?如果这是你的意思,那么V_comb
中的第二个值为NA,因为V1中的第二个值为“否”——但归根结底,V_comb
中的值顺序对我来说并不重要,只要所有的“是”答案被转换成适当的值,其名称来自原始变量。我认为您没有按预期定义DF_result
。我很确定V_comb
应该有3列数据,每个V1/2/3
V_comb
确实结合了原始变量的结果。这就是为什么它有12个值,3个原始变量各4个。原始变量是36个。看这张照片,谢谢你。这对我来说非常有效,因为我只关心V_comb
,但将原始变量加长是一个非常不幸的副作用。@KaC-这是data.frame的一个限制-它必须是矩形的。如果你只是想要新的因子,只需要使用c(如果其他(DF==“Yes”,names(DF)[col(DF)],NA)]
部分。这里是另一个版本的cbind(DF,V_comb=names(DF)[col(DF)*NA^(DF!=“Yes”))(可能有点简洁);)事实上,在我实际的数据集上尝试了所有的解决方案之后,我发现这是最有效的,所以我改变了这个公认的答案。
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>