使用 dplyr 的 start_with 跨特定列的行总和

rowsum across specific columns using dplyr's start_with

我正在尝试对数据集中的某些列进行聚合。我煞费苦心地组织数据,所以我想使用列名而不是索引来添加我的量表。

这是我的数据:

library(tidyverse)
data <- tibble(name = c("Ash", "Ashley", "Ashton"),
               hc_1 = c(1, 2, 3),
               hc_2 = c(2, 2, 2),
               ur_1 = c(1, 5, 5),
               ur_2 = c(3, 4, 3))

我想创建一个仅包含 hc 值的新列:

library(tidyverse)
data <- tibble(name = c("Ash", "Ashley", "Ashton"),
               hc_1 = c(1, 2, 3),
               hc_2 = c(2, 2, 2),
               ur_1 = c(1, 5, 5),
               ur_2 = c(3, 4, 3),
               hc_agg = c(3, 4, 5))

我试过此代码但收到错误消息:

data %>% mutate(hc_agg = pmap_dbl(select(., starts_with("hc"))), ~rowsum)

Error in as_mapper(.f, ...) : argument ".f" is missing, with no default

同样,我知道我可以使用索引,但这个数据集可能会改变变量。我宁愿使用列名来保持安全。

谢谢!

仅使用 dplyr,您可以:

data %>%
 mutate(hc_agg = rowSums(select(., starts_with("hc"))))

  name    hc_1  hc_2  ur_1  ur_2 hc_agg
  <chr>  <dbl> <dbl> <dbl> <dbl>  <dbl>
1 Ash        1     2     1     3      3
2 Ashley     2     2     5     4      4
3 Ashton     3     2     5     3      5

一种方式是

data %>% 
    nest(starts_with("hc"), .key = "hc") %>% 
    mutate(hc_agg = map(hc, sum)) %>% 
    unnest

name    ur_1    ur_2    hc_agg  hc_1    hc_2
<chr>   <dbl>   <dbl>   <dbl>   <dbl>   <dbl>
Ash     1       3       3       1       2
Ashley  5       4       4       2       2
Ashton  5       3       5       3       2