我正在处理一个来自lme4的数据集,并尝试学习如何应用reshape2将其从长格式转换为宽格式[完整代码在帖子末尾]。
library(lme4)
data("VerbAgg") # load the dataset
该数据集有9个变量:'Anger','Gender'和'id'不随'item'变化,而'resp'、'btype'、'situ'、'mode'和'r2'会随之变化。
我已经成功地使用reshape()函数将数据集从长格式转换为宽格式:
wide <- reshape(VerbAgg, timevar=c("item"),
idvar=c("id", 'Gender', 'Anger'), dir="wide")
这个数据集包含了316个观测值和123个变量,看起来已经正确转换。然而,我尝试使用reshape/reshape2重现宽数据框却没有成功。
wide2 <- recast(VerbAgg, id + Gender + Anger ~ item + variable)
Using Gender, item, resp, id, btype, situ, mode, r2 as id variables
Error: Casting formula contains variables not found in molten data: Anger
我可能不是很清楚recast如何定义id变量,但我非常困惑为什么它看不到"Anger"。同样地,
wide3 <- recast(VerbAgg, id + Gender + Anger ~ item + variable,
id.var = c("id", "Gender", "Anger"))
Error: Casting formula contains variables not found in molten data: item
有人能看出我哪里做错了吗?我想更好地理解融化/转换!
完整代码:
## load the lme4 package
library(lme4)
data("VerbAgg")
head(VerbAgg)
names(VerbAgg)
# Using base reshape()
wide <- reshape(VerbAgg, timevar=c("item"),
idvar=c("id", 'Gender', 'Anger'), dir="wide")
# Using recast
library(reshape2)
wide2 <- recast(VerbAgg, id + Gender + Anger ~ item + variable)
wide3 <- recast(VerbAgg, id + Gender + Anger ~ item + variable,
id.var = c("id", "Gender", "Anger"))
# Using melt/cast
m <- melt(VerbAgg, id=c("id", "Gender", "Anger"))
wide <- o cast(m,id+Gender+Anger~...)
Aggregation requires fun.aggregate: length used as default
# Yields a list object with a length of 8?
m <- melt(VerbAgg, id=c("id", "Gender", "Anger"), measure.vars = c(4,6,7,8,9))
wide <- dcast(m, id ~ variable)
# Yields a data frame object with 6 variables.