我必须使用 R 来解决以下问题。简而言之,我想根据数据框中不同列对的计算在数据框中创建多个新列。
数据如下:
df <- data.frame(a1 = c(1:5),
b1 = c(4:8),
c1 = c(10:14),
a2 = c(9:13),
b2 = c(3:7),
c2 = c(15:19))
df
a1 b1 c1 a2 b2 c2
1 4 10 9 3 15
2 5 11 10 4 16
3 6 12 11 5 17
4 7 13 12 6 18
5 8 14 13 7 19
输出应该如下所示:
a1 b1 c1 a2 b2 c2 sum_a sum_b sum_c
1 4 10 9 3 15 10 7 25
2 5 11 10 4 16 12 9 27
4 7 13 12 6 18 16 13 31
5 8 14 13 7 19 18 15 33
我可以使用 dplyr 通过以下方式进行一些手动工作来实现此目的:
df %>% rowwise %>% mutate(sum_a = sum(a1, a2),
sum_b = sum(b1, b2),
sum_c = sum(c1, c2)) %>%
as.data.frame()
因此,要做的是:获取其中包含字母“a”的列,逐行计算总和,并创建一个名为 sum_[letter] 的新列。对具有不同字母的列重复此操作。
这是可行的,但是,如果我有一个包含 300 个不同列对的大型数据集,则手动输入将很重要,因为我必须编写 300 个 mutate 调用。
我最近偶然发现了 R 包“purrr”,我的猜测是这将解决我以更自动化的方式做我想做的事情的问题。
特别是,我认为能够使用 purrr:map2 来传递两个列名列表。
- list1 = 其中包含数字 1 的所有列
- list2 = 其中包含数字 2 的所有列
然后我可以计算每个匹配列表条目的总和,其形式为:
map2(list1, list2, ~mutate(sum))
但是,我无法弄清楚如何使用 purrr 最好地解决这个问题。我对使用 purrr 相当陌生,所以我非常感谢有关此问题的任何帮助。