2016-06-22 2 views
1

lme4 패키지에서 HLM을 실행하기 위해 데이터 세트를 재 형성하고 있습니다.데이터 세트 변경

나는 주로 reshape2 패키지와 dplyr 패키지의 다른 함수에서 melt 함수를 시도했다. 그러나, 그들은 내가 원하는 것을 나에게주지 않았다.

ID Totalscore Gender SA3B SB3C SJJD SUAB 
0511 390  F  1  NA NA NA 
0522 340  M  NA 0  NA NA 
0533 180  F  NA 1  0  NA 
0782 301  M  NA NA NA 1 

ID는 수험생 ID입니다 : 여기

내가 지금 가지고있는 그 데이터 세트입니다. "SAEB, SB3C, SJJD, SUAB"은 테스트 항목입니다. 3000 개 이상의 항목이 있으며 각 수험생이 모든 항목을 볼 수는 없습니다. 1은 정답을 나타내고 0은 그렇지 않습니다. 따라서 데이터 세트에는 많은 NA가 있습니다.

이것은 내가 목표로 고쳐 데이터 세트를 얻을 수있다 :

Examinee  0511 0522 0533 0533 0782 
Total Score 390 340 180 180 301 
Gender  F  M  F  F  M 
Item   SA3B SB3C SB3C SJJD SUAB 
Itemscore  1  0  1  0  1 

내 말에 어려움은 다른 수험자 항목의 서로 다른 번호를 참조하고 있다는 것입니다 내가 가져올 최종 데이터 집합의 존재는해야 다시 형성된 데이터 세트에 모든 것이 포함되어 있기 때문에 (아무 것도 삭제되지 않았기 때문에) NAs가 아닙니다.

답변

1

당신은 melt를 사용하고 NA 값으로 행을 필터링 : 그것은 형식을 통해 단지 혼란이있을 수 있습니다

library(dplyr); library(tidyr); library(reshape2); 

melt(df, id.vars = c("ID", "Totalscore", "Gender"), 
     variable.name = "Item", value.name = "Itemscore") %>% 
filter(complete.cases(.)) %>% t %>% data.frame 

#    X1 X2 X3 X4 X5 
# ID   511 522 533 533 782 
# Totalscore 390 340 180 180 301 
# Gender  F M F F M 
# Item  SA3B SB3C SB3C SJJD SUAB 
# Itemscore  1 0 1 0 1 
+1

@Frank 네처럼 뭔가를 할 수 있습니다. 패키지를 로딩하는 것을 잊어 버리십시오. 감사! – Psidom

+0

안녕하세요, Psidom, 답변 해 주셔서 감사합니다. 그러나 원래 데이터 세트에는 "Item"및 "Itemscore"라는 변수가 없습니다. 그것이 어려운 곳이라고 생각하세요. – Wil

+0

데이터 세트는 게시물에서 보이는 것입니다.) – Wil

1

,하지만 난 변환 된 데이터를 가지고가는 경우에 당신이 다른 말 그대로 (즉, 다른 변수 위의 게시 설정 행 데이터 세트의)이면 이 아니고이 아니며 실제로는 lme4으로 HLM을 맞추는 데 유용합니다. 변수를 열로 사용해야합니다. 반면에, 그것은 당신이 의미하는 것일 수 있습니다.이 경우 Psidom의 해결책은 @ base의 R에서 reshape2::meltna.omit, 도구 (파이프, dplyr 등) 만 있으면된다는 것입니다.

내가 이런 짓을 했을까 :

## get data 
dd <- read.table(header=TRUE,text=" 
ID Totalscore Gender SA3B SB3C SJJD SUAB 
0511 390  F  1  NA NA NA 
0522 340  M  NA 0  NA NA 
0533 180  F  NA 1  0  NA 
0782 301  M  NA NA NA 1") 

library(reshape2) 
na.omit(melt(dd,id.vars=1:3,value.name="Itemscore", 
      variable.name="Item")) 

##  ID Totalscore Gender  Item Itemscore 
## 1 511  390  F  SA3B  1 
## 6 522  340  M  SB3C  0 
## 7 533  180  F  SB3C  1 
## 11 533  180  F  SJJD  0 
## 16 782  301  M  SUAB  1 

는 그런 다음

glmer(Itemscore~Gender+Totalscore+ (1|ID/Item) + (1|Item), 
     family="binomial") 

...

+0

안녕 벤. 이것에 대한 당신의 도움에 정말 감사합니다 !! 내가보고있는 데이터 셋은 lme4 패키지의''InstEval'' 데이터 셋입니다. 'str (InstEval)'. 나는 당신이 datase를 선물하는 방법이 나의 전치 버전이라고 생각한다. 나는 맞습니까? ' – Wil

+0

이것은 주로 형식화/발표 혼란이라고 생각합니다. 'str (InstEval)'(리스트의 각 * 요소 *를'head (InstEval)'과 비교) - 네, 내 것이 당신의 것으로부터 대체됩니다. –