R 中数字和字符列的 dcast - 默认返回长度

dcast for numeric and character columns in R - returning length by default

我有一个看起来像这样的数据:-

data_source   zip        date        calories      user            price
 compA        45768      18274        3500          abc             912.27
 compB        33098      18274        3500          groups          981.28
 compA        39104      18274        2500          ands            659.75

我想使用 dcast 获得宽格式的数据;早些时候它曾经工作,但现在没有。

data.table::dcast(zip + date + calories ~ data_source, value.var=c("user","price"), data=data)

如您所见,value.var 中的列具有 characternumeric 值,所以我不知道在 fun.aggregate 中使用什么。所以转换后的数据默认为 length 这是我不想要的。我只想要原样的值,但采用宽格式。谢谢你的帮助。

如果需要length,我们可以在fun.aggregate中指定length

library(data.table)
dcast(setDT(data), zip + date + calories ~ data_source, 
       value.var=c("user","price"), length)

根据显示的数据,没有重复项,所以它可以工作

dcast(setDT(data), zip + date + calories ~ data_source, value.var=c("user","price"))

如果有重复项,通过为分组变量添加 rowid 进行更正以具有唯一组合

dcast(setDT(data), rowid(zip, date, calories) + zip + date + calories 
          ~ data_source, value.var=c("user","price"))