首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将多个互斥因子列合并为一列

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

Stack Overflow用户
提问于 2014-09-15 10:14:15
回答 3查看 1.2K关注 0票数 0

假设我在一个数据框中有三列。我想把它们合并成一个单独的列。这三列中的每一列都是二元属性,例如绿/黄、红/蓝、黑/白等。

我希望将所有这些内容合并到一个列中,其中包含多个

代码语言:javascript
复制
 row1=c(0,0,1)
 row2=c(1,0,0)
 row3=c(0,1,0)
 df=data.frame(rbind(row1,row2,row3))

有没有办法将这些列中的每一列合并成一列?单列现在必须有六个不同的因子,而不是它已经有的两个因子。

有谁能教我怎么写代码吗?

EN

回答 3

Stack Overflow用户

发布于 2014-09-15 10:29:43

您可以像对二进制数进行编码一样对这些数据进行编码,方法是为每一列分配2的递增幂。您需要将每一行乘以c(1,2,4),然后求和。

代码语言:javascript
复制
# 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 

要将其添加为新列,请执行以下操作:

代码语言:javascript
复制
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
票数 2
EN

Stack Overflow用户

发布于 2014-09-15 14:25:41

尝试:

代码语言:javascript
复制
> 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是您想要的列。

票数 1
EN

Stack Overflow用户

发布于 2014-09-15 14:29:57

也许这就是你想要的:

代码语言:javascript
复制
> 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" 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25839962

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档