Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 在数据帧中将因子的级别转换为新因子_R_Dataframe - Fatal编程技术网

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>