Stata 有一个非常好的命令,egen
,这使得计算观察组的统计数据变得容易。例如,可以计算每个组的最大值、平均值和最小值,并将它们作为变量添加到详细数据集中。 Stata 命令是一行代码:
by group : egen max = max(x)
我从来没有在 R 中找到相同的命令。summarise
in the dplyr
包可以轻松计算每个组的统计数据,但随后我必须运行一个循环将统计数据与每个观察结果关联起来:
library("dplyr")
N <- 1000
tf <- data.frame(group = sample(1:100, size = N, replace = TRUE), x = rnorm(N))
table(tf$group)
mtf <- summarise(group_by(tbl_df(tf), group), max = max(x))
tf$max <- NA
for (i in 1:nrow(mtf)) {
tf$max[tf$group == mtf$group[i]] <- mtf$max[i]
}
有人有更好的解决方案吗?
以下是一些方法:
dplyr
library(dplyr)
tf %>% group_by(group) %>% mutate(max = max(x))
ave
这仅使用 R 的基数:
transform(tf, max = ave(x, group, FUN = max))
数据表
library(data.table)
dt <- data.table(tf)
dt[, max:=max(x), by=group]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)