列表中不同组合的平均值(缺少一些组合)

Mean of differnt combinations in a list (missing some of the combinations)

我有一个包含两个元素的列表,其中我对变量 countrygender.

的每个组合都有一个感兴趣的变量 value
# Toy example
A <- list()
  
A[[1]] <- data.frame(country=c("Spain", "Spain", "France", "France"),
                       gender= c("M", "F", "M", "F"),
                       value = c(100,125,10,200))

A[[2]] <- data.frame(country=c("Spain", "Spain", "France"),
                       gender=c("M", "F", "F"),
                       value = c(150,75,100)) 

数据如下所示:

[[1]]
  country gender value
1   Spain      M   100
2   Spain      F   125
3  France      M    10
4  France      F   200

[[2]]
  country gender value
1   Spain      M   150
2   Spain      F    75
3  France      F   100

我想为 gendercountry 的每个可能组合计算 value 的平均值(跨列表的元素),考虑到没有所有组合在列表的所有元素中(在该示例中,第二个元素在法国没有 Males 的值。

我期望的是这样的:

  country gender value
1   Spain      M   125
2   Spain      F   100
3  France      M     5
4  France      F   150 

知道如何处理吗?

这里需要的是 {tidyr}complete

A %>% 
  map(tidyr::complete, country, 
      gender = c("M", "F"), fill = list(value = 0)) %>% 
  bind_rows() %>% 
  group_by(country, gender) %>% 
  summarise(value = mean(value)) %>% 
  ungroup()

首先是 map,确保每个列表都包含 M 的所有行和 genderF 的所有行,然后用当前的国家/地区完成(您可以还指定应出席的国家)。然后确保 NA 改为 0

A %>%
  bind_rows() %>%
  group_by(country, gender) %>%
  summarise(value = sum(value) / length(A))