在 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
通过列出列的名称来对列求和非常简单:
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