首页 文章

数据帧:从列到新列名称的唯一值

提问于
浏览
2

我有以下示例数据框:

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

由于我只想要独特的组合,因此只能创建一个“红色方块”的新列 . 对于数据框中不存在的所有可能组合(例如,白色圆圈),不应创建列名 .

有人得到了我正在寻找的解决方案吗?

1 回答

  • 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
    

相关问题