假设我在数据框中有三列。我想将这些合并到一个列中。三列中的每一列都是二进制属性,例如绿色/黄色,红色/蓝色,黑色/白色等。
我想将所有这些合并到一个包含多个
的列中 row1=c(0,0,1)
row2=c(1,0,0)
row3=c(0,1,0)
df=data.frame(rbind(row1,row2,row3))
有没有办法将每个列合并为一个列?单列现在必须有六个不同的因素,而不是它已经存在的两个因素。
有人能告诉我如何编码吗?
答案 0 :(得分:2)
您可以对这些进行编码,就像编码二进制数一样,为每列分配增加的2的幂。您希望将每行乘以c(1,2,4)
,然后取总和。
# The multiplier, powers of two
x <- 2^(seq(ncol(df))-1)
x
## [1] 1 2 4
# The values
apply(df, 1, function(row) sum(row*x))
## row1 row2 row3
## 4 1 2
将其添加为新列:
df$new <- apply(df, 1, function(row) sum(row*x))
df
## X1 X2 X3 new
## row1 0 0 1 4
## row2 1 0 0 1
## row3 0 1 0 2
答案 1 :(得分:1)
尝试:
> df
X1 X2 X3
row1 0 0 1
row2 1 0 0
row3 0 1 0
>
>
> mm = melt(df)
No id variables; using all as measure variables
>
> mm$new = paste(mm$variable,mm$value,sep='_')
>
> mm
variable value new
1 X1 0 X1_0
2 X1 1 X1_1
3 X1 0 X1_0
4 X2 0 X2_0
5 X2 0 X2_0
6 X2 1 X2_1
7 X3 1 X3_1
8 X3 0 X3_0
9 X3 0 X3_0
mm $ new是您想要的列。
答案 2 :(得分:0)
也许这就是你想要的:
> df$X1 = ifelse(df$X1==0,'green','yellow')
> df$X2 = ifelse(df$X2==0,'red','blue')
> df$X3 = ifelse(df$X3==0,'black','white')
>
> df
X1 X2 X3
row1 green red white
row2 yellow red black
row3 green blue black
>
> unlist(df)
X11 X12 X13 X21 X22 X23 X31 X32 X33
"green" "yellow" "green" "red" "red" "blue" "white" "black" "black"