计算每个国家的平均值和R中的虚拟变量

Calculating the mean per country and dummy variable in R

在以下数据集中,感兴趣的变量是国家变量,stfdem.rc(对民主的满意度)和 prtvtbeR(在主要选举中投票给获胜政党的人 = 0,投票给败方 = 1;在比利时的摘录中)

目标是计算获胜者组和失败者组对民主的平均满意度。应该为这里的所有其他国家/地区完成此操作。

由于我是 R 的新手,我真的不知道从哪里开始。我可以用 aggregate 计算一个国家的平均值,就像我对类似数据集所做的那样:

cntrystfm <- aggregate(x = mean(stfdem), by = list(ESS.ready$cntry.x, ESS.ready$), FUN = mean, na.rm = T)

但我正在努力了解如何按国家和赢家和输家来做,并有一个数据框作为输出。我认为可以使用 dplyr 包和 group_by 来完成,但我并没有真正掌握诀窍。

感谢任何提示和帮助!谢谢!

这是数据集:

    ID cntry.x stfdem.rc prtvtcbeR prtvtcdkR prtvtdeeR prtvtcfiR prtvtcfrR prtvdde2R prtvtaisR prtvtaieR prtvtbilR
1   1      BE         5        NA        NA        NA        NA        NA        NA        NA        NA        NA
2   2      BE         1        NA        NA        NA        NA        NA        NA        NA        NA        NA
3   3      BE         6        NA        NA        NA        NA        NA        NA        NA        NA        NA
4   4      BE         9        NA        NA        NA        NA        NA        NA        NA        NA        NA
5   5      BE         2         0        NA        NA        NA        NA        NA        NA        NA        NA
6   6      BE         7         0        NA        NA        NA        NA        NA        NA        NA        NA
7   7      BE         9         1        NA        NA        NA        NA        NA        NA        NA        NA
8   8      BE        10        NA        NA        NA        NA        NA        NA        NA        NA        NA
9   9      BE         7        NA        NA        NA        NA        NA        NA        NA        NA        NA
10 10      BE         6         0        NA        NA        NA        NA        NA        NA        NA        NA
11 11      BE         6         1        NA        NA        NA        NA        NA        NA        NA        NA
12 12      BE         2         0        NA        NA        NA        NA        NA        NA        NA        NA
13 13      BE         5         1        NA        NA        NA        NA        NA        NA        NA        NA
14 14      BE         7         0        NA        NA        NA        NA        NA        NA        NA        NA
15 15      BE         8        NA        NA        NA        NA        NA        NA        NA        NA        NA
16 16      BE         6         0        NA        NA        NA        NA        NA        NA        NA        NA
17 17      BE         3         0        NA        NA        NA        NA        NA        NA        NA        NA
18 18      BE         5         0        NA        NA        NA        NA        NA        NA        NA        NA
19 19      BE         5         1        NA        NA        NA        NA        NA        NA        NA        NA
20 20      BE         7         1        NA        NA        NA        NA        NA        NA        NA        NA
21 21      BE         3         0        NA        NA        NA        NA        NA        NA        NA        NA
22 22      BE         7        NA        NA        NA        NA        NA        NA        NA        NA        NA
23 23      BE         7         0        NA        NA        NA        NA        NA        NA        NA        NA
24 24      BE         5        NA        NA        NA        NA        NA        NA        NA        NA        NA
25 25      BE         7         0        NA        NA        NA        NA        NA        NA        NA        NA
26 26      BE         1         0        NA        NA        NA        NA        NA        NA        NA        NA
27 27      BE         8         0        NA        NA        NA        NA        NA        NA        NA        NA
28 28      BE         7         0        NA        NA        NA        NA        NA        NA        NA        NA
29 29      BE         5         0        NA        NA        NA        NA        NA        NA        NA        NA
30 30      BE         7        NA        NA        NA        NA        NA        NA        NA        NA        NA
31 31      BE         5         0        NA        NA        NA        NA        NA        NA        NA        NA
32 32      BE         8        NA        NA        NA        NA        NA        NA        NA        NA        NA
33 33      BE         5         1        NA        NA        NA        NA        NA        NA        NA        NA
34 34      BE         6         0        NA        NA        NA        NA        NA        NA        NA        NA
35 35      BE         9        NA        NA        NA        NA        NA        NA        NA        NA        NA
36 36      BE         6         0        NA        NA        NA        NA        NA        NA        NA        NA
37 37      BE         8         0        NA        NA        NA        NA        NA        NA        NA        NA
38 38      BE         3         0        NA        NA        NA        NA        NA        NA        NA        NA
39 39      BE         8         0        NA        NA        NA        NA        NA        NA        NA        NA
40 40      BE         8         0        NA        NA        NA        NA        NA        NA        NA        NA
41 41      BE         7        NA        NA        NA        NA        NA        NA        NA        NA        NA
42 42      BE         8         0        NA        NA        NA        NA        NA        NA        NA        NA
43 43      BE         6         0        NA        NA        NA        NA        NA        NA        NA        NA

我试过:

new <- ESS.ready %>% 
  group_by(cntry.x, prtvtcbeR) %>% summarise(mean(stfdem.rc, na.rm = T))

并得到以下内容。但这似乎不对+我必须对我数据集中的每个国家/地区都这样做。

structure(list(cntry.x = c("BE", "BE", "BE", "BG", "CH", "CY", 
"CZ", "DE", "DK", "EE", "ES", "FI", "FR", "GB", "HU", "IE", "IL", 
"IS", "IT", "LT", "NL", "NO", "PL", "PT", "RU", "SE", "SI", "SK"
), prtvtcbeR = c(0, 1, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA
), `mean(stfdem.rc, na.rm = T)` = c(5.62482168330956, 5.94623655913978, 
6.07171314741036, 3.05838393274171, 7.38729508196721, 4.89052437902484, 
4.969836400818, 5.98835616438356, 7.33725247524752, 4.89203539823009, 
3.98091603053435, 6.8457595526561, 5.1180412371134, 5.58132956152758, 
4.49265477439664, 5.45338645418327, 5.91475409836066, 5.72589531680441, 
4.10554371002132, 4.93753123438281, 6.24653739612188, 7.24099378881988, 
4.90344062153163, 3.96885481552468, 3.86030061892131, 7.01158940397351, 
3.60661157024793, 4.78500551267916)), row.names = c(NA, -28L), groups = structure(list(
    cntry.x = c("BE", "BG", "CH", "CY", "CZ", "DE", "DK", "EE", 
    "ES", "FI", "FR", "GB", "HU", "IE", "IL", "IS", "IT", "LT", 
    "NL", "NO", "PL", "PT", "RU", "SE", "SI", "SK"), .rows = structure(list(
        1:3, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 14L, 
        15L, 16L, 17L, 18L, 19L, 20L, 21L, 22L, 23L, 24L, 25L, 
        26L, 27L, 28L), ptype = integer(0), class = c("vctrs_list_of", 
    "vctrs_vctr", "list"))), row.names = c(NA, 26L), class = c("tbl_df", 
"tbl", "data.frame"), .drop = TRUE), class = c("grouped_df", 
"tbl_df", "tbl", "data.frame"))
``

尝试:

out <- df %>% 
group_by(cntry.x, prtvtbeR) %>%
summarise(mean_satisfaction = mean(stfdem.rc)) 

这应该会为您提供一个数据框,其中包含国家/地区、获胜者状态以及每个国家/地区和获胜者状态组合的平均满意度列。

编辑:事实证明每个国家/地区的获胜者状态存储在不同的列中,因此要执行我上面写的操作,您需要先转换为长格式:

df %>% 
pivot_longer(cols = starts_with('prtv'), names_to = 'Country', values_to = 'winner_loser') %>%
group_by(Country, winner_loser) %>%
summarise(mean_satisfaction = mean(stfdem.rc, na.rm = TRUE)))