当我在dplyr中使用group_by和summarise时,可以自然地对不同的变量应用不同的摘要函数。例如:
library(tidyverse)
df <- tribble(
~category, ~x, ~y, ~z,
#----------------------
'a', 4, 6, 8,
'a', 7, 3, 0,
'a', 7, 9, 0,
'b', 2, 8, 8,
'b', 5, 1, 8,
'b', 8, 0, 1,
'c', 2, 1, 1,
'c', 3, 8, 0,
'c', 1, 9, 1
)
df %>% group_by(category) %>% summarize(
x=mean(x),
y=median(y),
z=first(z)
)
输出结果为:
# A tibble: 3 x 4
category x y z
<chr> <dbl> <dbl> <dbl>
1 a 6 6 8
2 b 5 1 8
3 c 2 8 1
我的问题是,使用summarise_at该怎么做?显然对于这个例子来说这是不必要的,但是假设我有很多变量需要求均值、中位数等等。
当我使用summarise_at时,是否会失去这种功能?我是否必须对所有变量组使用所有函数,然后扔掉我不想要的?
也许我只是漏看了什么,但我想不出来,而且文档中也没有这方面的示例。谢谢您的帮助。
Map
功能可以做到这一点,例如Map(function(f,v) f(v), c(mean,median,first), df[c("x","y","z")])
。也许purrr
的map
可以做类似的事情? - thelatemailMap
将每个函数依次应用于每个变量 - 查看mean(df$x); median(df$y); first(df$z)
的结果并将其与Map
代码进行比较。 - thelatemail