2

調査結果を保持するデータフレームがいくつかあります。最初のフレームには、調査の各質問の質問ID(q_id)が一覧表示されます。

  q_id
1   q1
2   q2
3   q3

2番目のデータフレームは、サブジェクトが応答したすべての質問に対する各サブジェクト(s_id)の応答(res)を保持します。被験者は質問をスキップできます:

  s_id q_id res
1    1   q1   a
2    2   q1   b
3    1   q2   b

生成したいのは、各質問への回答を示すテーブルです。ここで、列は質問IDであり、各行は件名を表します。上記の例では、テーブルは次のようになります。

  q1 q2  q3
1  a  b  NA
2  b  NA NA

そのようなテーブルを生成するための最良の方法は何ですか?

4

2 に答える 2

5

あなたの質問data.frameがでDQあり、あなたの答えであると仮定しますDT

q_idあなたはあなたの答えのあなたのコラムが利用可能なすべてのレベルを持っていることを確認する必要があります

DT$q_id <- factor(as.character(DT$q_id), levels = levels(DQ$q_id))

その後、あなたが望むようにキャストするためreshape2に使用dcastすることができますdrop = FALSE

library(reshape2)
dcast(DT, s_id~q_id, value.var = 'res', drop = FALSE)
  s_id q1   q2   q3
1    1  a    b <NA>
2    2  b <NA> <NA>
于 2013-02-08T01:36:32.813 に答える
3
> dat <- read.table(text="  s_id q_id res
+ 1    1   q1   a
+ 2    2   q1   b
+ 3    1   q2   b", header =TRUE, stringsAsFactors=FALSE)

# Create a dummy entry for each question:

> dat<- rbind(dat, data.frame(s_id=1,q_id=qdat$q_id, res= NA))
> dat
  s_id q_id  res
1    1   q1    a
2    2   q1    b
3    1   q2    b
4    1   q1 <NA>
5    1   q2 <NA>
6    1   q3 <NA>
> reshape(dat,  timevar="q_id", idvar="s_id", direction ="wide")
  s_id res.q1 res.q2 res.q3
1    1      a      b   <NA>
2    2      b   <NA>   <NA>
于 2013-02-08T01:40:38.287 に答える