0

Qualtrics の調査から得られたリスのデータセットがあります。次のようになります。

V3       Q8_42  Q8_33  Q8_72   Q8_38  Q13_1_42 Q13_1_33 Q13_1_72 Q13_1_38
Chap A     .    1       .        .       .      4        .        .
Chap B     1    .       .        .       4      .        .        .
Chap C     .    .       .        .       .      .        .        .
Chap D     .    .       .        .       .      .        .        .

スナップショットには、友達かどうかを尋ねられた 4 人の個人が示されています (q8_42 は A、q8_33 は B、q8_72 は C、q8_38 は D)。誰かが友達だと言った場合、その友達の強さを 1 ~ 5 の尺度で尋ねます (q13_1_42 は A、q13_1_33 は B、q13_1_72 は C、q13_1_38 は D)。全部で 95 人の個人がいて、9 つの質問すべてに、彼らの友情に関するものがあります。友情の質問ごとに1つの次のマトリックスになるように、マトリックス演算をどのように実行すればよいですか。

       Chap A   Chap B  Chap C  Chap D
Chap A  0       4       .       .
Chap B  4       0       .       .
Chap C  .       .       0       .
Chap D  .       .       .       0

私の解決策は、データ(「kolp」という名前)をRに読み込み、実行することでした

Chap.A <- (kolp$q8_42 * kolp$q13_1_42)
Chap.B <- (kolp$q8_33 * kolp$q13_1_33)
Chap.C <- (kolp$q8_72 * kolp$q13_1_72)
Chap.D <- (kolp$q8_38 * kolp$q13_1_38)
Mat.1 <- cbind(Chap.A, Chap.B, Chap.C, Chap.D)
rownames(Mat.1) <- c("Chap.A", "Chap.B", "Chap.C", "Chap.D")

これは私に与えます

         Chap.A Chap.B Chap.C Chap.D
Chap.A     NA      4     NA     NA
Chap.B      4     NA     NA     NA
Chap.C     NA     NA     NA     NA
Chap.D     NA     NA     NA     NA

しかし、これは不格好な方法であることはわかっています。特に、95x95 の薄暗い *.csv または *.txt ファイルとして抽出する 9 つの行列がある場合はなおさらです。

4

1 に答える 1

0

列が「questionID_individualID」の形式であると仮定すると、この関数を試してデータを処理できます。

f <- function(dat)
{
    n <- names(dat)

    id <- substring(n, nchar(n)-1)

    qu_id <- substring(n, 1, nchar(n)-3)

    individuals <- sort(unique(id))

    questions <- unique(qu_id)

    result <- 1

    for(q in questions)
    {
        filter <- qu_id==q

        result <- result * dat[,filter][,match(individuals, id[filter])]
    }

    result

    colnames(result) <- individuals

    result
}

として使用しf(kolp)ます。列が順不同であっても機能します。ただし、一部の質問にすべての個人の列がない場合、失敗します (または間違った結果が返されます)。

于 2013-03-27T20:45:36.647 に答える