在 dplyr 中对选定的列求和(使用 select() 方法)

awu*_*089 1 r contains dplyr rowwise

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

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")))

arg*_*t91 5

如果我理解正确,基本上你正在尝试做:

library(dplyr)

iris %>% mutate(sum = rowSums(select(., contains("Sepal"))))
Run Code Online (Sandbox Code Playgroud)

前几行:

  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
Run Code Online (Sandbox Code Playgroud)