gpt4 book ai didi

r - 如何对 `` dplyr `` or ` `tidyr`` 中的多列进行 rowSums?

转载 作者:行者123 更新时间:2023-12-02 16:02:58 24 4
gpt4 key购买 nike

例如,是否可以在 dplyr 中执行此操作:

new_name <- "Sepal.Sum"
col_grep <- "Sepal"

iris <- cbind(iris, tmp_name = rowSums(iris[,grep(col_grep, names(iris))]))
names(iris)[names(iris) == "tmp_name"] <- new_name

这会将名称中包含“Sepal”的所有列相加,并创建一个名为“Sepal.Sum”的新变量。

重要的是,该解决方案需要依赖 grep (或 dplyr:::matchesdplyr:::one_of 等)。 ) 为 rowSums 函数选择列时,并让新列的名称是动态的。

我的应用程序在循环中创建了许多新列,因此更好的解决方案是使用 mutate_each_ 生成许多新列。

最佳答案

这里是一个 dplyr 解决方案,它使用 contains 特殊函数在 select 中使用。

 iris %>% mutate(Sepal.Sum = iris %>% rowwise() %>% select(contains("Sepal")) %>% rowSums()) -> iris2
head(iris2)
Sepal.Length Sepal.Width Petal.Length Petal.Width Species Sepal.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

这里是基准:

Unit: milliseconds
expr
iris2 <- iris %>% mutate(Sepal.Sum = iris %>% rowwise() %>% select(contains("Sepal")) %>% rowSums())
min lq mean median uq max neval
1.816496 1.86304 2.132217 1.928748 2.509996 5.252626 100

关于r - 如何对 `` dplyr `` or ` `tidyr`` 中的多列进行 rowSums?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31843638/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com