创建一个新列,它是dplyr中特定列(由其名称选择)的总和

zes*_*sla 4 r dplyr tidyverse

我的问题是如何创建一个新列,它是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()选择列.


skd*_*skd 5

使用reduce()from 比purrr稍快rowSums并且肯定比 快apply,因为您避免了迭代所有行并且只利用向量化操作:

library(purrr)
library(dplyr)
iris %>% mutate(Petal = reduce(select(., starts_with("Petal")), `+`))
Run Code Online (Sandbox Code Playgroud)

请参阅了解时间安排