2012-11-27 14 views
6

Pracuję z zestawem danych dołączonym do lme4 i staram się nauczyć, jak zastosować poprawkę 2, aby przekształcić go z długiego na szeroki [pełny kod na końcu stanowisko].Przekształcanie złożonego zestawu danych z długiego na szeroki przy użyciu przekształcania()

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

Zestaw danych zawiera 9 zmiennych; "Wściekłość", "Płeć" i "id" nie różnią się w zależności od "pozycji", natomiast "resp", "btype", "situ", "tryb" i "r2" do.

ja z powodzeniem udało się przekształcić zestaw danych z długo formacie szerokim użyciu Reshape():

wide <- reshape(VerbAgg, timevar=c("item"), 
      idvar=c("id", 'Gender', 'Anger'), dir="wide") 

co daje 316 obserwacje na 123 zmiennych, i wydaje się być poprawnie przekształcony. Jednak nie udało mi się użyć funkcji reshape/reshape2 do odtworzenia szerokiej ramki danych.

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 

I nie może być w 100% jasne, w jaki definiuje przekształcenie zmiennych ID, ale jestem bardzo mylić, dlaczego nie widzi „gniew”. Podobnie, jeśli ktoś może zobaczyć, co robię źle, może to być

Chciałbym uzyskać lepsze zrozumienie topienia/odlewania!

Pełny kod:

## 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, ponieważ ** miłość ** rozumie topienie/odlewanie – agstudy

+1

szerokie plony 316 obserwacji na 26 zmiennych? kiedy sprawdzam dim (szeroki), mam 316 wierszy i 123 kolumny. – agstudy

+4

Znacznie lepiej będzie "topić się", a potem "rzucać" - wtedy łatwiej będzie zobaczyć, co się dzieje. – hadley

Odpowiedz

3

myślę następujący kod robi to, co chcesz.

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

Dziękujemy! Nie zdawałem sobie sprawy, że przedmiot powinien zostać uwzględniony jako identyfikator. Wygląda świetnie, dzięki! –