将 R 中的数据框重塑为宽格式

Reshape data frame in R to wide format

我正在尝试使用 reshape2 包的 dcast 将长格式数据框转换为宽格式。我的数据框看起来类似于下面的数据框

X = c(3,2,3,3,2,3,3,2,3)
Y = c(-3, -1, -3, -3, -1, -3, -3, -1, -3)
DATA = c(100, 200, 300, 400, 100, 500, 600, 200, 300)
measurement = c("A", "A", "A", "B", "B", "B", "C", "C", "C")
DF <- data.frame(X, Y, DATA, measurement)
wideDF <- dcast(DF, X + Y ~ measurement, fun.aggregate = mean, value.var="DATA", drop = TRUE)

dcast 函数工作得很好,但有时我有一个巨大的列名列表,我不想对所有列名进行硬编码(在上面的代码中,如 X + Y ),我想将列名作为向量传递,否则它会使我的代码变得简单。我可以使用 dcast 函数实现此目的吗?或者除了 dcast 之外还有其他函数可以实现吗?

您可以将公式创建为字符串,然后使用 as.formula()

lhs 中,我使用 setdiff().

获取所有不是 DATAmeasurement 的列名
library(reshape2)
lhs <- paste0(setdiff(names(DF), c("DATA", "measurement")), collapse = "+")

dcast(DF, as.formula(paste0(lhs, "~ measurement")), fun.aggregate = mean, value.var = "DATA", drop = TRUE)
#   X  Y   A   B   C
# 1 2 -1 200 100 200
# 2 3 -3 200 450 450