Как использовать dplyr для итеративного вычисления итоговых переменных - PullRequest
0 голосов
/ 22 мая 2019

У меня есть данные, содержащие оценки примерно 350 пунктов. Каждый предмет был оценен 10 людьми, каждый из которых оценил 3 из 350 предметов. Таким образом, мои столбцы представляют собой оценки для каждого элемента, из которых каждый элемент имеет 20 оценок. Таким образом, столбцы выглядят как Q20_1 Q20_2 Q20_3 ... Q20_20, Q22_1, Q22_2, ... и т. Д. Каждый участник - это ряд. Так что это матрица данных 1166x7000. Каждая строка содержит данные только для 60 столбцов (3 элемента) ответов, поскольку участники оценили только 3 элемента.

Я хочу использовать DPLYR для создания сводных переменных. Что-то вроде среднего значения Q20_1, Q20_5, Q20_7 и Q20_13 ... и затем повторить это для всех элементов. Тогда я хотел бы иметь возможность создать среднее из этих переменных.

Я пытался сделать это в SPSS. Код довольно прост.


COMPUTE O15_Y=(Q30_1 + Q30_2 + Q30_3 + Q30_4)/4.
EXECUTE.

COMPUTE O15_C=(Q30_5 + Q30_6 + Q30_7 + Q30_8)/4.
EXECUTE.

COMPUTE O15_F=(Q30_9 + Q30_10 + Q30_11 + Q30_12)/4.
EXECUTE.

COMPUTE O15_PS=(Q30_13 + Q30_14 + Q30_15 + Q30_16)/4.
EXECUTE.

COMPUTE O15_A=(Q30_17 + Q30_18 + Q30_19 + Q30_20)/4.
EXECUTE.

...

COMPUTE OA_Y=(O1_Y + O2_Y + O3_Y + O4_Y + O5_Y + O6_Y + O7_Y + O8_Y + O9_Y + O10_Y + O11_Y + O12_Y 
    + O13_Y + O14_Y + O15_Y + O16_Y + O17_Y + O18_Y + O19_Y + O20_Y)/20.
EXECUTE.

Приведенный выше код показывает, как я создаю сводные переменные для одного из элементов. Затем, когда у меня есть все из них, я их усредняю, чтобы получить среднее значение всех этих оценок по группе интересов. Проблема в том, что я должен воссоздать этот код для каждого из 350 элементов, что занимает очень много времени.

Кажется, что dplyr может сделать это более эффективно, но я не совсем уверен, как. Любая помощь приветствуется.

1 Ответ

0 голосов
/ 22 мая 2019

если я понимаю ваш вопрос, у вас есть данные, которые выглядят примерно так:

library(tidyverse)

metadata <- tibble(Q1_1 = c(4,5,5), Q1_2 = c(2,4,7), Q1_3 = c(8,3,9),
                   Q2_1 = c(0,1,3), Q2_2 = c(2,7,4), Q2_3 = c(1,1,4))
metadata 
#> # A tibble: 3 x 6
#>    Q1_1  Q1_2  Q1_3  Q2_1  Q2_2  Q2_3
#>   <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1     4     2     8     0     2     1
#> 2     5     4     3     1     7     1
#> 3     5     7     9     3     4     4

На основании вашего комментария звучит так, как будто вы хотите сгруппировать по некоторому "Q # _", а затемсуммируйте все ответы на этот вопрос "Q # _" (поправьте меня, если я ошибаюсь).Вы можете попробовать это:

metadata %>%
  gather(Q, val)%>%
  group_by(Q) %>%
  summarise(mean = mean(val), median = median(val), sd = sd(val))
#> # A tibble: 6 x 4
#>   Q      mean median    sd
#>   <chr> <dbl>  <dbl> <dbl>
#> 1 Q1_1   4.67      5 0.577
#> 2 Q1_2   4.33      4 2.52 
#> 3 Q1_3   6.67      8 3.21 
#> 4 Q2_1   1.33      1 1.53 
#> 5 Q2_2   4.33      4 2.52 
#> 6 Q2_3   2         1 1.73

Используя gather, мы берем данные от широких к длинным, затем группируем по интересующей вас переменной и суммируем ответы.Здесь я просто показываю среднее значение, медиану и стандартное отклонение, но вы получите картину.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...