【问题标题】:R dplyr: Conditional Mutate based on GroupsR dplyr:基于组的条件变异
【发布时间】:2018-09-05 13:42:31
【问题描述】:

目前,我正在解决以下问题:

我正在尝试将我的数据集分组并创建一个新变量,以捕获不属于该组的所有相反案例的组平均值 - 在特定时间范围内。

这是我使用 mpg 数据集的代码的副本。

cars <- mpg

cars$other_cty_yearly_mean <- 0

for(i in cars$cyl){
  cars <- cars %>%
    group_by(year) %>%
    mutate(other_cty_yearly_mean = if_else(
      cyl == i,
      mean(cty[cyl != i]),
      other_cty_yearly_mean
    )) %>%
    ungroup() %>%
    as.data.frame()
}

有没有更好的方法不需要 for 循环?

谢谢,最好的!

【问题讨论】:

  • 1.以mtcars 数据集为例(它更小),2. 添加 desired result 作为您问题的视觉表示。请编辑您的问题。

标签: r for-loop dplyr


【解决方案1】:

你可以使用purrr中的map_dbl来转换你的for循环:

mpg %>% 
  group_by(year) %>% 
  mutate(other_cty_yearly_mean = map_dbl(cyl, ~ mean(cty[!cyl %in% .x])))

# A tibble: 234 x 12
# Groups:   year [2]
#   manufacturer model      displ  year   cyl trans      drv     cty   hwy fl    class   other_cty_yearly_mean
#   <chr>        <chr>      <dbl> <int> <int> <chr>      <chr> <int> <int> <chr> <chr>                   <dbl>
# 1 audi         a4           1.8  1999     4 auto(l5)   f        18    29 p     compact                  14.6
# 2 audi         a4           1.8  1999     4 manual(m5) f        21    29 p     compact                  14.6
# 3 audi         a4           2    2008     4 manual(m6) f        20    31 p     compact                  14.7
# 4 audi         a4           2    2008     4 auto(av)   f        21    30 p     compact                  14.7
# 5 audi         a4           2.8  1999     6 auto(l5)   f        16    26 p     compact                  17.6
# ... with 229 more rows

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-23
    • 2020-08-13
    • 2017-06-02
    • 2018-09-16
    相关资源
    最近更新 更多