我有以下示例数据框:
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
使用此数据框,我想从COLOR和SHAPE的组合为每个唯一值创建一个新列。因此,在我的示例中,我想要新的列:'红色方块'绿色圆圈'蓝色三角形'白色方块' ;,'黑色三角形'黄色圆圈'红色圆圈'蓝色圆圈'。新列中每个观察值应与COLOR和SHAPE组合相对应。对于红场'这看起来像是:
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
由于我只想要独特的组合,因此我们需要一个新的“红色方块”列。应该只创建一次。对于数据框中不存在的所有可能组合(例如白色圆圈),不应创建列名称。
任何人都有我想要的解决方案吗?
答案 0 :(得分:3)
我们可以使用table
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