2013-03-27 2 views
0

У меня есть набор данных с белкой, взятый из опроса Qualtrics. Это выглядит следующим образом:Матричные операции с конкретными столбцами в data.frame

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  . .  .  .  .  .  .  . 

Снимок показывает четыре человека спросил, если они друзья (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 

Но я знаю, что это неуклюжий способ пойти об этом, особенно с 9 матриц для извлечения как * .csv или * .txt, с тусклым от 95x95

ответ

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). Он работает, даже если столбцы вышли из строя. Но он будет терпеть неудачу (или дать неправильные результаты), если в некоторых вопросах нет столбцов для всех людей.

+0

спасибо @ Ferdinand.kraft ... Я дам ему вихрь сегодня и посмотрю, как это работает. – user1433981

Смежные вопросы