R:使用带有列前缀的字符向量来创建新列,对带前缀的列进行求和值

问题描述 投票:0回答:1

我有一个具有以下粗略结构的大型数据集,其中多个列共享前缀:

dataset <- data.frame(a1 =  c(1:10), a2 = c(11:20),b1=c(21:30),b2=c(31:40))

我想创建新列,其中包含共享前缀的每组列的行总和,这样它最终看起来像这样

   a1 a2 b1 b2 a_sum b_sum
1   1 11 21 31    12    52
2   2 12 22 32    14    54
3   3 13 23 33    16    56
4   4 14 24 34    18    58
5   5 15 25 35    20    60
6   6 16 26 36    22    62
7   7 17 27 37    24    64
8   8 18 28 38    26    66
9   9 19 29 39    28    68
10 10 20 30 40    30    70

我的首选方法是以某种方式将前缀

vec <- c("a","b")
的字符向量输入到适合更大管道工作流程的 mutate 函数中。

我一直想知道如何将

across
matches
一起使用,也许可以通过某种
lapply
调用来对向量的每个元素执行它,但我做不到。我宁愿避免涉及重塑数据的解决方案,因为它非常大,并且有许多列与这个特定问题无关。

r dplyr
1个回答
1
投票

我们可以在

map
向量上使用
lapply
vec
来创建所需的一列小标题,最后使用
bind_cols()
将它们绑定到原始 data.frame 的末尾。 要选择与字符前缀匹配的列,我们通常应该使用
starts_with
选择助手。

library(dplyr)
library(purrr)

vec <- c("a","b")

dataset |>
    bind_cols(vec |>
                  map(\(x) tibble("{x}_sum" := rowSums(
                      select(dataset, starts_with(x))
                  ))))

   a1 a2 b1 b2 a_sum b_sum
1   1 11 21 31    12    52
2   2 12 22 32    14    54
3   3 13 23 33    16    56
4   4 14 24 34    18    58
5   5 15 25 35    20    60
6   6 16 26 36    22    62
7   7 17 27 37    24    64
8   8 18 28 38    26    66
9   9 19 29 39    28    68
10 10 20 30 40    30    70
© www.soinside.com 2019 - 2024. All rights reserved.