使用Reshape2在R中将DF从长到宽重新整形,没有聚合功能

时间:2016-01-25 19:07:16

标签: r reshape2

我使用的数据中的一项常见任务是将客户数据从长到大重塑。我有一个使用下面概述的Reshape执行此操作的过程,它基本上创建了一个附加了数字索引的新(但未修改)列。在我的情况下,我不想对数据进行任何修改。我的问题,因为我经常使用reshape2进行其他操作,这是如何用dcast完成的?例如,似乎示例数据不需要通过id进行融合,但我不确定如何将其扩展。是否有人能够在reshape2中提供代码以生成与" wide"相当的框架。在下面的例子中?

感谢。

实施例

date_up   <- as.numeric(as.Date("1990/01/01"))
date_down <- as.numeric(as.Date("1960/01/01"))
ids <- data.frame(id=rep(1:1000, 3),site=rep(c("NMA", "NMB","NMC"), 1000))
ids <- ids[order(ids$id), ]
dates <-  data.frame(datelast=runif(3000, date_down, date_up),
          datestart=runif(3000, date_down, date_up),
          dateend=runif(3000, date_down, date_up),
          datemiddle=runif(3000, date_down, date_up))
dates[] <- lapply(dates[ , c("datestart", "dateend", "datemiddle")], 
             as.Date.numeric, origin = "1970-01-01")
df <- cbind(ids, dates)

# Make a within group index and reshape df
df$gid <- with(df, ave(rep(1, nrow(df)), df[,"id"], FUN = seq_along))
wide <- reshape(df, idvar = "id", timevar = "gid", direction = "wide")

1 个答案:

答案 0 :(得分:2)

我们可以使用dcast中的data.tablevalue.var可以使用多个setDT(df)列。将'data.frame'转换为'data.table'(dcast),使用公式value.var并指定library(data.table) dcast(setDT(df), id~gid, value.var=names(df)[2:6])

data.table

注意:与reshape2

相比,AnyCPU方法会更快