计算每个国家的平均值和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)))
在以下数据集中,感兴趣的变量是国家变量,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)))