2016-06-22 5 views
1

lme4パッケージでHLMを実行するためにデータセットを再形成しています。データセットを変更する

私は主に、reshape2パッケージとdplyrパッケージの他の機能で溶融機能を試しました。しかし、彼らは私に欲しいものを私に与えてくれませんでした。ここで

は、私が今持っているデータセットです。

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の解決策の唯一の利点は、基底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)'と比較する) - そうです、私はあなたのものから転置されています。 –

関連する問題