我需要用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还比较新,所以我真的很感激任何关于这个问题的帮助。
aa1、aa2、ab1、ab2
等? - Stephen Hendersongroup_by
的转置,例如slice_by
??? - Stephen Henderson