使用 purrr 计算多列之间的差异

Using purrr to calculate differences across multiple columns

我正在尝试使用 purrr 来计算多个健身评估之间的差异分数。

示例数据框如下所示:

PreA <- c(1, 4, 5, 7, 8, 12)
PostA = c(2, 6, 10, 14, 16, NA)
PreB = c(4, 6, 8, 10 ,12, NA)
PostB = c(12, 9, 10, 13, 14, 17)
df <- data.frame(PreA, PostA, PreB, PostB) 

我希望计算所有列(我的实际数据集大约有 40 个)之间的 pre 和 post 度量之间的差异,同时忽略 NA 并创建另一个列。我认为通过添加 mutate 创建另一列会很容易,但我正在努力弄清楚如何让 purrr 为此工作。有没有一种简洁的方法可以使用 purrr 来避免复制和粘贴?

我看到了这段代码

  x %>%
   select(starts_with(y)) %>%
    rowSums(na.rm = TRUE)
}

map(column_prefix, my_fun, x = df)

我认为这可行,但我不确定如何让它减去而不是求和。

提前感谢您的任何建议。

你可以用 tidyverse 函数做一件事:

library(tidyverse)

df %>% 
  mutate(n = row_number()) %>% 
  pivot_longer(cols = -n, names_to = c("group", ".value"), names_pattern = "(Pre|Post)(.+)") %>% 
  group_by(n) %>% 
  summarise(across(A:B, diff, .names = "diff_{col}"))


# A tibble: 6 x 3
      n diff_A diff_B
  <int>  <dbl>  <dbl>
1     1     -2      8
2     2      0      3
3     3      2      2
4     4      4      3
5     5      4      2
6     6     NA     NA

数据

PreA = c(4, 6, 8, 10 ,12, NA)
PostA = c(2, 6, 10, 14, 16, NA)
PreB = c(4, 6, 8, 10 ,12, NA)
PostB = c(12, 9, 10, 13, 14, 17)
df <- data.frame(PreA, PostA, PreB, PostB) 

  PreA PostA PreB PostB
1    4     2    4    12
2    6     6    6     9
3    8    10    8    10
4   10    14   10    13
5   12    16   12    14
6   NA    NA   NA    17