【问题标题】:is there an equivalent to Stata's egen function? [duplicate]是否有等效于 Stata 的 egen 功能? [复制]
【发布时间】:2014-08-01 10:13:22
【问题描述】:

Stata 有一个非常好的命令,egen,它可以很容易地计算观察组的统计数据。例如,可以计算每个组的最大值、平均值和最小值,并将它们作为变量添加到详细数据集中。 Stata 命令是一行代码:

by group : egen max = max(x)

我从来没有在 R 中找到相同的命令。dplyr 包中的summarise 可以轻松计算每个组的统计信息,但是我必须运行一个循环来将统计信息与每个观察结果相关联:

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 包小插图)。 -1
  • 我对@9​​87654326@ 没有偏见(我编写了一些函数),但即使从Stata 的角度来看,它也只是用于创建变量的便利集合。没有一个中心思想可以映射到 R 中的任何中心思想。即使是按组生成汇总统计数据的便利实际上也不是egen 的定义或角色的一部分,而只是它的某些组件可能实现的东西。我不会为 R 说话,但我怀疑它的一些包也有点杂。
  • 我同意你的观点,但它仍然非常有用。

标签: r stata


【解决方案1】:

这里有一些方法:

dplyr

library(dplyr)

tf %>% group_by(group) %>% mutate(max = max(x))

已经

这仅使用 R 的基础:

transform(tf, max = ave(x, group, FUN = max))

data.table

library(data.table)

dt <- data.table(tf)
dt[, max:=max(x), by=group]

【讨论】:

    猜你喜欢
    • 2019-11-04
    • 2012-07-18
    • 1970-01-01
    • 1970-01-01
    • 2010-11-28
    • 2011-02-13
    • 1970-01-01
    • 2014-11-27
    • 1970-01-01
    相关资源
    最近更新 更多