小编Mar*_*rie的帖子

将 dplyr::summarise 与 dplyr::across 和 purrr::map 一起使用以对具有相同前缀的列进行求和

我有一个数据框,我想在其中对具有相同前缀的列值求和以生成新列。我当前的问题是它没有考虑我的group_by变量并返回相同的值。问题的一部分是我在 across 函数中选择的 .cols 变量吗?

样本数据


library(dplyr)
library(purrr)

set.seed(10)

dat <- data.frame(id = rep(1:2, 5), 
                  var1.pre  = rnorm(10), 
                  var1.post = rnorm(10),
                  var2.pre  = rnorm(10), 
                  var2.post = rnorm(10) 
                   ) %>% 
  mutate(index = id) 

var_names = c("var1", "var2")

Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我尝试过的

sumfunction <- map(
  var_names,
  ~function(.){
    sum(dat[glue("{.x}.pre")], dat[glue("{.x}.post")], na.rm = TRUE)
  }
) %>% 
  setNames(var_names)

dat %>% 
 group_by(id) %>%
  summarise(
    across(
      .cols  = index,
      .fns   = sumfunction, 
      .names = "{.fn}"
    )
  ) %>% 
  ungroup
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

所需输出

在此输入图像描述

r dplyr purrr

1
推荐指数
1
解决办法
423
查看次数

标签 统计

dplyr ×1

purrr ×1

r ×1