将多个互斥因子列合并为一个列

时间:2014-09-15 02:14:15

标签: r merge categorical-data

假设我在数据框中有三列。我想将这些合并到一个列中。三列中的每一列都是二进制属性,例如绿色/黄色,红色/蓝色,黑色/白色等。

我想将所有这些合并到一个包含多个

的列中
 row1=c(0,0,1)
 row2=c(1,0,0)
 row3=c(0,1,0)
 df=data.frame(rbind(row1,row2,row3))

有没有办法将每个列合并为一个列?单列现在必须有六个不同的因素,而不是它已经存在的两个因素。

有人能告诉我如何编码吗?

3 个答案:

答案 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"