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

时间:2017-02-11 10:29:18

标签: r dataframe dplyr

要将sum列的data.frame放入变量中,我就这样做了:

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)无问题的案例。

3 个答案:

答案 0 :(得分:4)

您可以使用%$%代替%>%直接访问列:

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

答案 1 :(得分:2)

你可能会追随:

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

使用{ }解释如下:

?magrittr::`%>%`

答案 2 :(得分:1)

由于它与摘要一起使用,你总是可以欺骗R并使用脏黑客:

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

甚至

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

返回:

[1] 0

同样,对于此方案,这相当于last()nth(n=1)nth(n=-1)