【发布时间】:2018-11-03 19:36:48
【问题描述】:
我想编写一个函数,通过一些指定的标准来汇总提供的数据,在这种情况下是按年龄
示例数据是用户年龄及其统计数据表。
df <- data.frame('Age'=rep(18:25,2), 'X1'=10:17, 'X2'=28:35,'X4'=22:29)
接下来我定义与分析相关的输出列
output_columns <- c('Age', 'X1', 'X2', 'X3')
此函数计算 X1 的基本总和。 X2 和 X3 按年龄分组。
aggr <- function(data, criteria, output_columns){
k <- data %>% .[, colnames(.) %in% output_columns] %>%
group_by_(.dots = criteria) %>%
#summarise_each(funs(count), age) %>%
summarize_if(is.numeric, sum)
return (k)
}
当我这样称呼它时
> e <- aggr(df, "Age", output_columns)
> e
# A tibble: 8 x 3
Age X1 X2
<int> <int> <int>
1 18 20 56
2 19 22 58
3 20 24 60
4 21 26 62
5 22 28 64
6 23 30 66
7 24 32 68
8 25 34 70
我想要另一个名为 count 的列,它显示每个年龄段的观察次数。期望的输出是
> desired
Age X1 X2 count
1 18 20 56 2
2 19 22 58 2
3 20 24 60 2
4 21 26 62 2
5 22 28 64 2
6 23 30 66 2
7 24 32 68 2
8 25 34 70 2
我尝试了不同的方法来做到这一点,例如tally(),summary_each 等等。它们都提供了错误的结果。
我相信他们应该是一种简单易行的方法。 任何帮助表示赞赏。
【问题讨论】:
-
我认为您需要将
%>% group_by_at(criteria) %>% mutate(count = n())添加到您的函数中 -
管道中的最后一行可以替换为:
{ cbind(summarize_if(., is.numeric, sum), summarize(., n = n())) }
标签: r dplyr summarization