正如我所提到的,你所需要的只是一个“时间”变量,你应该没问题。
Mark Miller 展示了基本 R 方法,并手动创建了时间变量。
这是一种自动创建时间变量的方法,以及dcast
“reshape2”包中的等效命令:
## Creating the "time" variable. This does not depend
## on the rows being in a particular order before
## assigning the variables
df <- within(df, {
A <- do.call(paste, df[1:2])
time <- ave(A, A, FUN = seq_along)
rm(A)
})
## This is the "reshaping" step
library(reshape2)
dcast(df, V1 + V2 ~ time, value.var = "V3")
# V1 V2 1 2
# 1 A D 10 11
# 2 B E 12 13
# 3 C F 14 15
自我推销提醒
由于这种类型的问题已经出现了好几次,并且由于许多数据集并不总是具有唯一的 ID,因此我已经实现了上述的一个变体,作为getanID
我的“splitstackshape”包中调用的函数。在其当前版本中,它将“时间”变量的名称硬编码为“.id”。如果您使用它,步骤将是:
library(splitstackshape)
library(reshape2)
df <- getanID(df, id.vars=c("V1", "V2"))
dcast(df, V1 + V2 ~ .id, value.var = "V3")