1

通过列出它们的名称来对列进行求和是相当简单的:

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

4

1 回答 1

6

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

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
于 2019-03-06T21:22:59.800 回答