R:基于3列制作数据透视表[transpose]

时间:2015-06-08 05:27:07

标签: r

我有这个数据帧(df):

ID  Type  Order Revenue
1   apples  1    $100
1   oranges 2    $100 
2   grapes  1    $500
2   oranges 2    $500
2   grapes  3    $500
2   grapes  4    $500

我想转置它来获取这个数据帧,其中列标题是" order"原始数据框中的列:

ID   1       2      3      4     Revenue
1  apples oranges                  $100 
2  grapes oranges grapes grapes    $500

我尝试了dcast(df, df$ID, df$Order)

但这并没有给我我想要的东西。它给了我数据框本身的顺序,如下所示:

   ID   1   2   3   4
    1   1   2
    2   1   2   3   4 

我基本上想要"类型"在给定特定ID和订单的情况下,在数据框中填充(此组合是唯一的。)

非常感谢!!

修改 我希望在使用dcast时添加收入列

1 个答案:

答案 0 :(得分:1)

dcastformula作为其第二个参数。因此,您需要提供需要填充“广泛”的值列。格式。在这种情况下,`value.var'是'类型'

library(reshape2)
dcast(df, ID~Order, value.var='Type', fill='')
#   ID      1       2      3      4
#1  1 apples oranges              
#2  2 grapes oranges grapes grapes

或者您可以使用spread,其参数类似于帖子中显示的

library(tidyr)
spread(df, Order, Type, fill='')

更新

对于更新的数据集,请更改'公式'

  dcast(dfN, ID+Revenue~Order, value.var='Type', fill='')
  #  ID Revenue      1       2      3      4
  #1  1    $100 apples oranges              
  #2  2    $500 grapes oranges grapes grapes

数据

df <- structure(list(ID = c(1L, 1L, 2L, 2L, 2L, 2L), Type = c("apples", 
"oranges", "grapes", "oranges", "grapes", "grapes"), Order = c(1L, 
2L, 1L, 2L, 3L, 4L)), .Names = c("ID", "Type", "Order"),
 class =  "data.frame", row.names = c(NA, -6L))