我有以下数据:
ID Device TIME New
ABC Brush 2016_Q1 3
ABC Brush 2016_Q2 4
ABC Brush 2016_Q3 2
ABC Brush 2016_Q4 1
DEF Brush 2016_Q1 4
DEF Brush 2016_Q2 3
DEF Brush 2016_Q3 5
DEF Brush 2016_Q4 2
ABC Pen 2016_Q1 1
ABC Pen 2016_Q2 3
ABC Pen 2016_Q3 2
ABC Pen 2016_Q4 4
DEF Pen 2016_Q1 1
DEF Pen 2016_Q2 3
DEF Pen 2016_Q3 2
我想创建一个新的数据集,其中每个id都有一个这样的记录
Id brush_New_2016_Q1 brush_New_2016_Q2 brush_New_2016_Q3 brush_New_2016_Q4 pen_New_2016_Q1 pen_New_2016_Q2 pen_New_2016_Q3 pen_New_2016_Q4
ABC 3 4 2 1 1 3 2 4
DEF 4 3 5 2 1 3 2 0
我知道我必须使用Reshape2
包,但是我不确定如何使用它来生成结果表。这是自动创建列名的方法吗?我有20台设备和3年的数据。
答案 0 :(得分:1)
您可以使用reshape2,但我发现使用tidyr可以轻松得多。
df %>%
unite(new_col, 2, 3, sep = "_") %>%
spread(new_col, New)
unite()
通过将Device
和TIME
列粘合在一起来创建新列,并将其命名为new_col
,然后spread()
转换该列的值顶部的new_col
为列,使用New
作为键。
希望有帮助!
答案 1 :(得分:0)
您可以使用dcast
软件包中的data.table
函数:
# create a dummy column
df$sudo <- paste(df$Device, 'New', df$TIME, sep = '_')
# expand the data using dcast
dcast(df[c('ID','sudo','New')], ID ~ sudo, fill = 0)