gpt4 book ai didi

使用 recast() 从长到宽 reshape 复杂数据集

转载 作者:行者123 更新时间:2023-12-04 15:35:18 27 4
gpt4 key购买 nike

我正在使用 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")

这对 123 个变量产生 316 个观察结果,并且似乎已正确转换。但是,我没有成功使用 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

我可能不是 100% 清楚 recast 如何定义 id 变量,但我很困惑为什么它没有看到“愤怒”。相似地,
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.

最佳答案

我认为以下代码可以满足您的需求。

library(lme4) 
data("VerbAgg")

# Using base reshape()
wide <- reshape(VerbAgg, timevar=c("item"),
idvar=c("id", 'Gender', 'Anger'), dir="wide")
dim(wide) # 316 123

# Using melt/cast
require(reshape2)
m1 <- melt(VerbAgg, id=c("id", "Gender", "Anger","item"), measure=c('resp','btype','situ','mode','r2'))
wide4 <- dcast(m1,id+Gender+Anger~item+variable)
dim(wide4) # 316 123

R> wide[1:5,1:6]
Anger Gender id resp.S1WantCurse btype.S1WantCurse situ.S1WantCurse
1 20 M 1 no curse other
2 11 M 2 no curse other
3 17 F 3 perhaps curse other
4 21 F 4 perhaps curse other
5 17 F 5 perhaps curse other

R> wide4[1:5,1:6]
id Gender Anger S1WantCurse_resp S1WantCurse_btype S1WantCurse_situ
1 1 M 20 no curse other
2 2 M 11 no curse other
3 3 F 17 perhaps curse other
4 4 F 21 perhaps curse other
5 5 F 17 perhaps curse other

关于使用 recast() 从长到宽 reshape 复杂数据集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13591010/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com