使用 dplyr 获取 R 中 data.frame 列的总和的更好方法



为了将data.frame列的sum放在变量中,我这样做了:

library(dplyr)
data <- data.frame("x" = c(1,2,3), "y" = c("a","b","c"))
way01 <- data %>% filter(y == "d") %>% summarise(total = sum(x)) %>% .$total
way02 <- data %>% filter(y == "d") %>% .$x %>% sum

我觉得做summarise(total = sum(x)) %>% .$total%>% .$x %>% sum很笨拙.有更优雅的方法吗?

我想要类似%>% sum(.$x)的东西,但它不起作用。

PS:建议使用"d"作为过滤器,以处理numeric(0)没有问题的情况。

您可以使用%$%而不是%>%直接访问列:

> data %>% filter(y == "d") %$% sum(x)
[1] 0

您可能追求:

way03 <- data %>% filter(y == "d") %>% { sum(.$x) }

{ }的用法在以下文件中进行了说明:

?magrittr::`%>%`

由于它与摘要一起使用,因此您始终可以欺骗R并使用肮脏的hacks:

data %>% summarise(total = sum(x[y == "d"])) %>% first()

甚至

data %>% summarise(sum(x[y == "d"])) %>% first()

返回:

[1] 0

同样,这相当于此场景的last()nth(n=1)nth(n=-1)

最新更新