如何使用dplyr迭代计算汇总变量

时间:2019-05-22 15:46:16

标签: r dplyr

我的数据包含大约350项评分。每个项目的评分为10人,每个评分为350个项目中的3个。所以我的专栏是每个项目的评分,其中每个项目都有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 :(得分:0)

如果我理解您的问题,那么您的数据看起来像这样:

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,我们从宽到长获取数据,然后将您感兴趣的变量分组并汇总响应。在这里,我仅显示均值,中位数和标准差,但您可以理解。

相关问题