2015-02-22 4 views
-1

Как бы вы оценили это с помощью только R-функций lapply(), sapply() и т. Д.?добавить столбец и вычислить общий балл для случаев, которые имеют как минимум 4 ответа

Добавить столбец (тревоги), чтобы провести общий балл

likert.scale.matrix <- cbind(scale.matrix.2, rep(NA, dim(scale.matrix.2)[1]))

dimnames(likert.scale.matrix) <- list(id = (mydata.clean$id), 
           c("general", "affective", "cognitive", "value", "difficulty", "anxiety")) 

<!-- html table generated in R 3.1.1 by xtable 1.7-4 package --> 
<!-- Sun Feb 22 14:44:01 2015 --> 
<table border=1> 
<tr> <th> </th> <th> general </th> <th> affective </th> <th> cognitive </th> <th> value </th> <th> difficulty </th> <th> anxiety </th> </tr> 
    <tr> <td align="right"> 3 </td> <td align="right"> 4.00 </td> <td align="right"> 4.00 </td> <td align="right"> 5.00 </td> <td align="right"> 4.00 </td> <td align="right"> 4.00 </td> <td align="right"> 21.00 </td> </tr> 
    <tr> <td align="right"> 34 </td> <td align="right"> 2.00 </td> <td align="right"> 3.00 </td> <td align="right"> 3.00 </td> <td align="right"> 2.00 </td> <td align="right"> 2.00 </td> <td align="right"> 12.00 </td> </tr> 
    <tr> <td align="right"> 40 </td> <td align="right"> 3.00 </td> <td align="right"> 3.00 </td> <td align="right"> 3.00 </td> <td align="right"> 3.00 </td> <td align="right"> 3.00 </td> <td align="right"> 15.00 </td> </tr> 
    <tr> <td align="right"> 66 </td> <td align="right"> 3.00 </td> <td align="right"> 3.00 </td> <td align="right"> 3.00 </td> <td align="right"> 4.00 </td> <td align="right"> 3.00 </td> <td align="right"> 16.00 </td> </tr> 
    <tr> <td align="right"> 67 </td> <td align="right"> 2.00 </td> <td align="right"> 4.00 </td> <td align="right"> 2.00 </td> <td align="right"> 2.00 </td> <td align="right"> 2.00 </td> <td align="right"> 12.00 </td> </tr> 
</table> 

вычислений общий балл за исключением случаев, которые имеют по крайней мере 4 ответа

for(i in 1:dim(likert.scale.matrix)[1]){ 
    n <- 0 # number of responses 
    sum <- 0 # total statistics anxiety 

    for (j in 1:dim(likert.scale.matrix)[2]){ 
     if(!is.na(likert.scale.matrix[i,j])){ 
      # calculate total statistics anxiety 
      sum <- sum + likert.scale.matrix[i,j] 
      # increment number of responses 
      n <- n+1 
     } 
    } 

    # if the number of responses is 4 or more score is given 
    if(n >= 4) {likert.scale.matrix[i, 6] <- sum} 
} 

ответ

0

зачем использовать lapply или sapply ?

Вы должны действительно использовать

s <- sum(likert.scale.matrix, na.rm = TRUE) 
n <- sum(!is.na(likert.scale.matrix)) 
+0

Я надеялся не использовать использование каких-либо петель и воспользоваться векторными ориентированными функциями АиРа, но не может понять, как поставить ограничение на сумме (если 4 из из 5 значений не NA, а затем вычислить сумму). –

+0

if (apply (likert.scale.matrix [, 1: 5], 1, count)> = 4) { likert.scale.matrix [, "anxiety"] <- apply (likert.scale.matrix [, 1 : 5], 1, sum) } –

+0

извинения, код, который я написал, не делает то, что вам нужно. Если вы rowSums (..., na.rm = TRUE) над соответствующими столбцами, то раз это будет с помощью as.numeric (rowSums (lik ...> 0, na.rm = TRUE))) –