我的数据包含大约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可以更有效地做到这一点,但我不确定如何做到。任何帮助表示赞赏。
答案 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
,我们从宽到长获取数据,然后将您感兴趣的变量分组并汇总响应。在这里,我仅显示均值,中位数和标准差,但您可以理解。