当前位置: 首页 > 知识库问答 >
问题:

Dataframe:从列到新列名的唯一值

太叔烨霖
2023-03-14

我有以下示例数据框:

data.frame(ID=c(1:9),COLOR=c('red','green','blue','white','black','yellow','red','blue','red'),
           SHAPE=c('square','circle','triangle','square','triangle','circle','circle','circle','square'), 
           VAR_X=c(5,8,3,9,7,4,2,9,12))


  ID  COLOR    SHAPE VAR_X
1  1    red   square     5
2  2  green   circle     8
3  3   blue triangle     3
4  4  white   square     9
5  5  black triangle     7
6  6 yellow   circle     4
7  7    red   circle     2
8  8   blue   circle     9
9  9    red   square    12

有了这个dataframe,我想为颜色和形状组合中的每个唯一值创建一个新列。因此,在我的示例中,我想要新的列:'red square','green circle','blue triangle','white square','black triangle','yellow circle','red circle','blue circle'。新列中每个观察值的值应与颜色和形状组合相对应。对于“红场”,这看起来像:

  ID  COLOR    SHAPE VAR_X red_square
1  1    red   square     5       true
2  2  green   circle     8      false
3  3   blue triangle     3      false
4  4  white   square     9      false
5  5  black triangle     7      false
6  6 yellow   circle     4      false
7  7    red   circle     2      false
8  8   blue   circle     9      false
9  9    red   square    12       true

因为我只想要唯一的组合,所以“红方”的新列只应该创建一次。对于数据框中不存在的所有可能的组合(例如白色圆圈),不应创建列名。

有人知道我要找的解决方案吗?

共有1个答案

申炳
2023-03-14

我们可以使用表格

cbind(df1, as.data.frame.matrix(with(df1, table(ID, paste(COLOR, SHAPE, sep="_"))!=0)))
# ID  COLOR    SHAPE VAR_X black_triangle blue_circle blue_triangle green_circle red_circle red_square white_square yellow_circle
#1  1    red   square     5          FALSE       FALSE         FALSE        FALSE      FALSE       TRUE        FALSE         FALSE
#2  2  green   circle     8          FALSE       FALSE         FALSE         TRUE      FALSE      FALSE        FALSE         FALSE
#3  3   blue triangle     3          FALSE       FALSE          TRUE        FALSE      FALSE      FALSE        FALSE         FALSE
#4  4  white   square     9          FALSE       FALSE         FALSE        FALSE      FALSE      FALSE         TRUE         FALSE
#5  5  black triangle     7           TRUE       FALSE         FALSE        FALSE      FALSE      FALSE        FALSE         FALSE
#6  6 yellow   circle     4          FALSE       FALSE         FALSE        FALSE      FALSE      FALSE        FALSE          TRUE
#7  7    red   circle     2          FALSE       FALSE         FALSE        FALSE       TRUE      FALSE        FALSE         FALSE
#8  8   blue   circle     9          FALSE        TRUE         FALSE        FALSE      FALSE      FALSE        FALSE         FALSE
#9  9    red   square    12          FALSE       FALSE         FALSE        FALSE      FALSE       TRUE        FALSE         FALSE
 类似资料: