假设我在一个数据框中有三列。我想把它们合并成一个单独的列。这三列中的每一列都是二元属性,例如绿/黄、红/蓝、黑/白等。
我希望将所有这些内容合并到一个列中,其中包含多个
row1=c(0,0,1)
row2=c(1,0,0)
row3=c(0,1,0)
df=data.frame(rbind(row1,row2,row3))有没有办法将这些列中的每一列合并成一列?单列现在必须有六个不同的因子,而不是它已经有的两个因子。
有谁能教我怎么写代码吗?
发布于 2014-09-15 10:29:43
您可以像对二进制数进行编码一样对这些数据进行编码,方法是为每一列分配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发布于 2014-09-15 14:25:41
尝试:
> 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_0mm$new是您想要的列。
发布于 2014-09-15 14:29:57
也许这就是你想要的:
> 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" https://stackoverflow.com/questions/25839962
复制相似问题