gpt4 book ai didi

r - summarise_at dplyr 多列

转载 作者:行者123 更新时间:2023-12-05 05:19:15 25 4
gpt4 key购买 nike

我在应用组后尝试在多个列上应用一个复杂的函数。

代码示例是:

library(dplyr)
data(iris)

add = function(x,y) {
z = x+y
return(mean(z))
}

iris %>%
group_by(Species) %>%
summarise_at(.vars=c('Sepal.Length', 'Sepal.Width'),
.funs = add('Sepal.Length', 'Sepal.Width' ) )

我原以为该函数会应用于每个组并作为新列返回,但我得到:

Error in x + y : non-numeric argument to binary operator

我怎样才能完成这项工作?

请注意,我真正的问题有一个比我在这里编写的简单 add 函数复杂得多的函数,它需要将两列作为单独的实体输入,我不能先将它们相加。

谢谢

最佳答案

不要认为您需要 summarise_at,因为您对 add 的定义会处理多个输入参数。 summarise_at 在您将相同的更改应用于多个列而不是合并它们时很有用。

如果你只想要列的总和,你可以尝试:

iris %>%
group_by(Species) %>%
summarise_at(
.vars= vars( Sepal.Length, Sepal.Width),
.funs = sum)

给出:

     Species Sepal.Length Sepal.Width
<fctr> <dbl> <dbl>
1 setosa 250 171
2 versicolor 297 138
3 virginica 329 149

如果你想把列加在一起,你可以这样做:

iris %>%
group_by(Species) %>%
summarise( k = sum(Sepal.Length, Sepal.Width))

给出:

     Species     k
<fctr> <dbl>
1 setosa 422
2 versicolor 435
3 virginica 478

将此表单与您的 add 定义一起使用

add = function(x,y) {
z = x+y
return(mean(z))
}


iris %>%
group_by(Species) %>%
summarise( k = add(Sepal.Length, Sepal.Width))

返回

     Species     k
<fctr> <dbl>
1 setosa 8
2 versicolor 9
3 virginica 10

关于r - summarise_at dplyr 多列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46703239/

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