【发布时间】:2021-04-10 17:50:48
【问题描述】:
我创建了一个表格,其中包含人们参与按国家和性别划分的调查的平均天数。
tbl_tmp <- df_tmp1 %>%
group_by(country, Sex) %>%
summarize(Mean_Days_Used = round(mean(Days_Used), 1)) %>%
spread(Sex, Mean_Days_Used)
结果是
# A tibble: 10 x 4
# Groups: country [10]
country Female Male `No Response`
<chr> <drtn> <drtn> <drtn>
1 AU 23.3 days NA days NA days
2 CA 60.8 days 46.5 days NA days
3 FR NA days 17.0 days NA days
4 GB 52.0 days 62.8 days 31 days
5 HK NA days 125.0 days NA days
6 IE 109.6 days 100.5 days NA days
7 JP NA days 10.0 days NA days
8 NZ 118.0 days 8.0 days NA days
9 PL NA days NA days 27 days
10 US 35.2 days 41.7 days 86 days
我现在想为每一行和每一列添加边际平均值,但有两个转折:
- 我想要一个加权平均值(按每个单元格中条目的比例加权),而不仅仅是一个简单的行或列平均值
- 我需要处理 NA,当没有来自特定国家的特定性别的受访者时会出现这种情况
我通常会使用addmargins 来添加所有边际总和/平均值等,但这无法解释每个单元格中进入者的相对频率,此外,还会阻塞 NA。例如,如果新西兰有 10 名男性受访者和 20 名女性受访者,我希望边缘列的第 8 行为 (118 * 10 + 8 * 20 + 0 )/30 = 44.67。类似的论点适用于加权列均值。
我应该如何计算这些加权平均值?
在此致以诚挚的谢意
托马斯·飞利浦
【问题讨论】:
-
在您总结之前,如果您可以为
df_tmp1提供dput会有所帮助。或者至少是dput的一个子集,其中包含几个国家/地区的价值数据。 -
df_tmp1 <- tibble( UserId = LETTERS[1:11], country = c(rep("AU", 5), rep("CA", 6)), Sex = c(rep("Female", 3), rep("Male", 2), "Female", rep("Male", 2), rep("No Response", 3) ), Days_Used = 1:11 ) -
你如何计算边缘列?
(Average_Female_days * count_of_male + Average_male_days * count_of_female + Average_No_Response)/Total_count_of_country? -
在任何给定的行(即对于任何给定的国家),我想计算
(Average_Female_days_in_this_country * count_of_female_in_this_country + Average_male_days_in_this_country * count_of_male_in_this_country + Average_No_Response_days_in_this_country * count_of_No_Response_in_this_country)/Total_count_in_this_country。以此类推,每列底部的平均值是给定性别的受访者平均天数在所有国家/地区的加权平均值