我的问题是如何创建一个新列,它是dplyr中某些特定列(由其名称选择)的总和.例如,使用iris数据集,我创建一个名为Petal的新列,它是Petal.Length和Petal.Width的总和.
iris %>% mutate(Petal = Petal.Length+Petal.Width)
Run Code Online (Sandbox Code Playgroud)
现在假设我有一个20列的数据集,其名称中包含'Petal'.我想创建一个"Petal"列,它总结了所有这些列.我绝对不想在我的代码中键入所有列名称.感觉在dplyr中应该有一行代码可以实现.感谢是否有人可以提供帮助.
Gre*_*gor 15
我同意MrFlick的说法,整理你的数据是可取的 - 特别是如果你想做除了这些列之外的任何事情 - 但这里有一个选择:
iris %>% mutate(
Petal = rowSums(select(., starts_with("Petal")))
)
Sepal.Length Sepal.Width Petal.Length Petal.Width Species Petal
1 5.1 3.5 1.4 0.2 setosa 1.6
2 4.9 3.0 1.4 0.2 setosa 1.6
3 4.7 3.2 1.3 0.2 setosa 1.5
4 4.6 3.1 1.5 0.2 setosa 1.7
5 5.0 3.6 1.4 0.2 setosa 1.6
...
Run Code Online (Sandbox Code Playgroud)
请参阅?select辅助选项,而不是starts_with()选择列.
使用reduce()from 比purrr稍快rowSums并且肯定比 快apply,因为您避免了迭代所有行并且只利用向量化操作:
library(purrr)
library(dplyr)
iris %>% mutate(Petal = reduce(select(., starts_with("Petal")), `+`))
Run Code Online (Sandbox Code Playgroud)
请参阅此了解时间安排