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