我有这个数据帧(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时添加收入列
答案 0 :(得分:1)
dcast
将formula
作为其第二个参数。因此,您需要提供需要填充“广泛”的值列。格式。在这种情况下,`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))