您可以使用增强型dcast
函数从数据表 /questions/tagged/data.table包,您可以在其中选择多个值变量。和setDT(mydf)
您将数据框转换为数据表并使用[, idx := 1:.N, by = ID]
您通过以下方式添加索引ID
您随后将在dcast
公式:
library(data.table)
dcast(setDT(mydf)[, idx := 1:.N, by = ID], ID ~ idx, value.var = c("x","y"))
或者与的开发版本数据表 (v1.9.7+) https://github.com/Rdatatable/data.table/wiki/Installation,您可以使用新的rowid
功能:
dcast(setDT(mydf), ID ~ rowid(ID), value.var = c("x","y"))
gives:
ID x_1 x_2 x_3 y_1 y_2 y_3
1: a 1 1 2 2 4 3
2: b 1 3 NA 3 2 NA
3: c 2 NA NA 4 NA NA
4: d 1 NA NA 3 NA NA
使用数据:
mydf <- structure(list(x = c(1L, 1L, 2L, 1L, 1L, 3L, 2L), y = c(2L, 3L,
4L, 3L, 4L, 2L, 3L), ID = structure(c(1L, 2L, 3L, 4L, 1L, 2L,
1L), .Label = c("a", "b", "c", "d"), class = "factor")), .Names = c("x",
"y", "ID"), class = "data.frame", row.names = c(NA, -7L))