使用 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
我正在尝试使用 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