1

8列のdata.frameがあります。1 つは被験者のリスト (被験者ごとに 1 行) で、残りの 7 行は 1 または 0 のいずれかのスコアです。データは次のようになります。

>head(splitkscores)
  subject block3 block4 block5 block6 block7 block8 block9
1   40002      0      0      1      0      0      0      0
2   40002      0      0      1      0      0      1      1
3   40002      1      1      1      1      1      1      1
4   40002      1      1      0      0      0      1      0
5   40002      0      1      0      0      0      1      1
6   40002      0      1      1      0      1      1      1

3列のdata.frameを作成したい。科目用の 1 つの列。他の2つの列では、1つは私のdata.frame(件名を除く)の各行からランダムに選択された3つまたは4つの数字の合計を持つ必要があり、もう1つの列は最初に選択されなかった残りの値の合計を持つ必要がありますランダムサンプル。

助けていただければ幸いです。前もって感謝します

4

2 に答える 2

0

不必要な複雑さのないきちんとした解決策を次に示します (入力が と呼ばれると仮定しますdf)。

chosen=sort(sample(setdiff(colnames(df),"subject"),sample(c(3,4),1)))
notchosen=setdiff(colnames(df),c("subject",chosen))
out=data.frame(subject=df$subject,
               sum1=apply(df[,chosen],1,sum),sum2=apply(df[,notchosen],1,sum))

平易な英語で: 「件名」以外の列名からサンプルを抽出し、3 または 4 のサンプル サイズを選択して、それらの列名を呼び出しますchosen。他の列であることを定義notchosenします(明らかに「件名」を除く)。次に、サブジェクトのリスト、選択された列の合計、および選択されていない列の合計を含むデータ フレームを返します。終わり。

于 2012-06-08T23:34:17.930 に答える
0

これでうまくいくと思います:[手作業でミスをしたため、他の回答に基づいてデータの読み込み方法を変更しました...]

   splitkscores <- read.table(text = "  subject block3 block4 block5 block6 block7 block8 block9
1   40002      0      0      1      0      0      0      0
2   40002      0      0      1      0      0      1      1
3   40002      1      1      1      1      1      1      1
4   40002      1      1      0      0      0      1      0
5   40002      0      1      0      0      0      1      1
6   40002      0      1      1      0      1      1      1", header = TRUE)

   df2 <- data.frame(subject = splitkscores$subject, sum3or4 = NA, leftover = NA)
   df2$sum3or4 <- apply(splitkscores[,2:ncol(splitkscores)], 1, function(x){
       sum(sample(x, sample(c(3,4),1), replace = FALSE))
     })
   df2$leftover <- rowSums(splitkscores[,2:ncol(splitkscores)]) - df2$sum3or4

   df2
     subject sum3or4 leftover
   1   40002       1        0
   2   40002       2        1
   3   40002       3        4
   4   40002       1        2
   5   40002       2        1
   6   40002       1        4
于 2012-06-08T22:55:14.500 に答える