Средневзвешенное значение dplyr дает ошибку длины ... Как суммировать средневзвешенное значение? - PullRequest
0 голосов
/ 08 января 2019

Как вы получаете сводки для взвешенных результатов опроса?

Каждый раз, когда я пытаюсь это сделать, я получаю сообщение о том, что длины не совпадают.

library(tidyverse)

x <- tbl_df(data.frame("Age" = c(21,21,15,15,22,22,47,47,42,42,33,33,32,32), 
"survey answer 1-10 scale" = c(1,10,3,6,5,4,8,1,10,3,6,5,4,8), 
"weight" =c(.7,.8,.9,1,1.1,1.2,1.3,.7,.8,.9,1,1.1,1.2,1.3)))

print(x)

# # A tibble: 14 x 3
#      Age survey.answer.1.10.scale weight
#    <dbl>                    <dbl>  <dbl>
#  1    21                        1    0.7
#  2    21                       10    0.8
#  3    15                        3    0.9
#  4    15                        6    1  
#  5    22                        5    1.1
#  6    22                        4    1.2
#  7    47                        8    1.3
#  8    47                        1    0.7
#  9    42                       10    0.8
# 10    42                        3    0.9
# 11    33                        6    1  
# 12    33                        5    1.1
# 13    32                        4    1.2
# 14    32                        8    1.3



x %>%
    group_by(Age) %>%
    summarise(weighted.mean(., w=.$weight, na.rm=TRUE))

Что возвращает:

Error in summarise_impl(.data, dots) : 
Evaluation error: 'x' and 'w' must have the same length.

В другом ответе говорилось, что взвешенное означает только работу с матрицами? но это не имеет смысла. Даже когда я попробую, нет Буэно:

as.matrix(x)->mat.rx
mat.rx %>%
group_by(Age) %>%
    summarise(weighted.mean(., w=.$weight, na.rm=TRUE))

, который возвращает:

Error in UseMethod("group_by_") : 
  no applicable method for 'group_by_' applied to an object of class "c('matrix'
, 'double', 'numeric')"

1 Ответ

0 голосов
/ 08 января 2019
library(tidyverse)

x <- tbl_df(data.frame("Age" = c(21,21,15,15,22,22,47,47,42,42,33,33,32,32), 
"survey answer 1-10 scale" = c(1,10,3,6,5,4,8,1,10,3,6,5,4,8), 
"weight" =c(.7,.8,.9,1,1.1,1.2,1.3,.7,.8,.9,1,1.1,1.2,1.3)))

x %>% 
    group_by(Age) %>%
    summarise(weighted.mean(survey.answer.1.10.scale, w=weight, na.rm=TRUE))
# A tibble: 7 x 2
    Age `weighted.mean(survey.answer.1.10.scale, w = weight, na.rm = TRUE)`
  <dbl>                                                               <dbl>
1    15                                                                4.58
2    21                                                                5.8 
3    22                                                                4.48
4    32                                                                6.08
5    33                                                                5.48
6    42                                                                6.29
7    47                                                                5.55
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...