【问题标题】:group “weighted” rolling mean while excluding own group value when a group has multiple observations当一个组有多个观察值时,组“加权”滚动平均值同时排除自己的组值
【发布时间】:2020-01-20 16:25:17
【问题描述】:

当一个组有多个观察值时,我正在尝试计算组“加权”滚动平均值,同时排除自己的组值。这与我之前的问题group "weighted" mean with multiple grouping variables and excluding own group value 有关。关键区别在于,这种方法不容易适用,因为现在一个组有多个观察值。

基于以下数据集,这是我要应用的操作。例如,前两行的新变量将采用 19*9/18 + 48*3/18 + 6*2/18 + 31*4/18 = 25.05。接下来的两行将占用 81*1/10 + 52*3/10 + 6*2/10 + 31*4/10 = 37.3,依此类推。

set.seed(57)
df <- data.frame(
  state = rep(c("AL", "CA"), each = 12),
  year = rep(c(2011:2012), 12),
  county = rep(letters[1:6], each = 4),
  value = sample(100, 24),
  wt = sample(10, 24, replace = T)
) %>% arrange(state, year)

如果我应用以下代码,问题是来自同一县的观察结果也包含在加权平均公式中。

df %>%
  group_by(state, year) %>%
  mutate(new_val = purrr::map_dbl(row_number(), 
                         ~weighted.mean(value[-.x], wt[-.x])))

作为一种解决方法,我尝试了以下方法(首先在县年内找到加权平均值并应用上面的代码),但两者并没有产生相同的结果,尽管有些相似。

df %>%
  group_by(state, county, year) %>%
  mutate(wp = weighted.mean(value, wt),
         wt2 = sum(wt)) %>%
  distinct(state, year, county, wp, wt2) %>%
  ungroup() %>%
  group_by(state, year) %>%
  mutate(new_val = purrr::map_dbl(row_number(), 
                                  ~weighted.mean(wp[-.x], wt2[-.x])))

感谢您抽出宝贵时间阅读本文!

【问题讨论】:

    标签: r tidyverse


    【解决方案1】:

    我找到了答案,但我确信这不是最好的方法。任何其他建议都将对将来的参考非常有帮助。

    x <- c(rep(c(letters[1:3]), 2), rep(c(letters[4:6]), 2))
    year <- rep(rep(c(2011:2012), each = 3), time = 2)
    state <- rep(c("AL", "CA"), each = 6)
    
    get_wv <- function(x, year, state){
    
      new_val <- weighted.mean(df$value[df$county != x & df$year == year & df$state == state], 
                                       df$wt[df$county != x & df$year == year & df$state == state])  
    
      new_val
    
    }
    
    res <- pmap(.l = list(x, year, state), .f = get_wv)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-06-21
      • 2020-05-03
      • 2014-05-19
      • 1970-01-01
      • 2013-03-17
      • 2021-02-08
      • 1970-01-01
      相关资源
      最近更新 更多