首页 > 解决方案 > 如何对 R 中的列求和,其中要求和的列在单独的数据框中定义

问题描述

我需要对数据框中的列求和,其中需要求和的列在单独的数据框中定义。下面的可重现示例。

dataset <- tibble(L1 = runif(100, 0, 1),
                  L2 = runif(100, 0, 1),
                  L3 = runif(100, 0, 1),
                  L4 = runif(100, 0, 1))


cols_to_sum <- tibble(col1 = c("L1","L2"),
                      col2 = c("L3","L4"))

在上面的示例中,我需要在数据集中创建两个额外的列,一个称为“L1L3”,它是 L1 和 L3 的总和,L2 和 L4 类似。所需的输出应类似于下面的数据框。cols_to_sum 数据框可以有任意数量的行,而数据集可以有任意数量的列。

dataset <- tibble(L1 = runif(100, 0, 1),
                  L2 = runif(100, 0, 1),
                  L3 = runif(100, 0, 1),
                  L4 = runif(100, 0, 1)) %>%
  mutate(L1L3 = L1 + L3,
         L2L4 = L2 + L4)

标签: rdata-manipulation

解决方案


一个选项涉及dplyr并且purrr可能是:

map_dfc(.x = asplit(cols_to_sum, 1), ~ dataset %>%
         mutate(!!paste(paste(.x, collapse = "_"), "sum", sep = "_") := rowSums(select(., .x))) %>%
         select(ends_with("sum"))) %>%
 bind_cols(dataset)

   L1_L3_sum L2_L4_sum      L1     L2     L3    L4
       <dbl>     <dbl>   <dbl>  <dbl>  <dbl> <dbl>
 1     1.42      1.79  0.621   0.878  0.802  0.908
 2     0.944     1.39  0.135   0.527  0.809  0.864
 3     1.16      0.859 0.607   0.361  0.555  0.498
 4     1.71      1.10  0.982   0.853  0.729  0.252
 5     0.856     0.950 0.287   0.0234 0.568  0.927
 6     0.235     1.16  0.00368 0.363  0.232  0.801
 7     1.27      1.24  0.516   0.601  0.755  0.637
 8     1.37      1.38  0.486   0.914  0.882  0.465
 9     0.368     1.12  0.168   0.642  0.200  0.482
10     0.341     1.33  0.317   0.477  0.0240 0.857

推荐阅读