将 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()
.
获取所有不是 DATA
或 measurement
的列名
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
我正在尝试使用 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()
.
DATA
或 measurement
的列名
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