2012-11-27 27 views
6

我用自带的lme4数据集工作,并且正在努力学习如何运用reshape2把它从长并转换为宽[全码处的结束岗位。重塑一个复杂的数据集从长到广泛使用重铸()

library(lme4) 
data("VerbAgg") # load the dataset 

数据集有9个变量; “愤怒”,“性别”和“ID”不“项目”有所不同,而“RESP”, “BTYPE”,“就地”,“模式”和“R2”做。

我已成功能够将数据集从长期使用重塑()转换为宽幅:

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 

我可能不完全清楚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. 
+0

+1因为你**爱**理解融化/铸造 – agstudy

+1

广泛产生316观察26个变量??当我检查昏暗(宽)我有316行和123列。 – agstudy

+4

“熔化”然后“铸造”会更好 - 然后你就可以更容易地看到发生了什么问题。 – hadley

回答

3

我认为下面的代码你想要做什么。

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 
+0

谢谢!我没有意识到项目应该包含在ID中。这看起来不错,谢谢! –