在 dplyr 中汇总 selected 列(使用 select() 方法)

Summing across selected columns (using select() methods) in dplyr

通过列出列的名称来对列求和非常简单:

iris %>% rowwise() %>% mutate(sum = sum(Sepal.Length, Sepal.Width, Petal.Length))

但是,假设有更多的列,并且您有兴趣提取所有包含 "Sepal" 的列,而不用手动列出它们。具体来说,我正在寻找一种方法,就像 dplyr 中的 select() 允许您使用 contains()、starts_with() 等对列进行子集化

有多种方法可以使用 mutate_all() + sum() + join() 来实现与此查询相同的结果,但我更感兴趣的是看到与解决方案接近的东西下面的代码:

iris %>% rowwise() %>% mutate(sum = sum(contains(colnames(.), "Sepal")))

如果我没理解错的话,基本上你想做的是:

library(dplyr)

iris %>% mutate(sum = rowSums(select(., contains("Sepal"))))

前几行:

  Sepal.Length Sepal.Width Petal.Length Petal.Width Species sum
1          5.1         3.5          1.4         0.2  setosa 8.6
2          4.9         3.0          1.4         0.2  setosa 7.9
3          4.7         3.2          1.3         0.2  setosa 7.9
4          4.6         3.1          1.5         0.2  setosa 7.7
5          5.0         3.6          1.4         0.2  setosa 8.6
6          5.4         3.9          1.7         0.4  setosa 9.3