r - 计算跨数据集子集的汇总统计量 [R 中 Stata 的 "bysort"的等价物是什么?]

标签 r stata

过去几年我一直在 Stata 编程,最近大约 4 个月前切换到 R。

我有以下格式的数据:

       popname sex year age COUNTRY
329447     AUS   f 1921  23     AUS
329448     AUS   f 1921  24     AUS
329449     AUS   f 1921  25     AUS
329450     AUS   f 1921  26     AUS
329451     AUS   f 1921  27     AUS
329452     AUS   f 1921  28     AUS
...
329532     AUS   f 1922  23     AUS
329533     AUS   f 1922  24     AUS
329534     AUS   f 1922  25     AUS
...        ...   .  ..   ..     ...
297729     BLR   f 1987  59     BLR
297730     BLR   f 1987  60     BLR
297731     BLR   f 1987  61     BLR
... 
291941     BLR   m 1973  71     BLR
291942     BLR   m 1973  72     BLR
291993     BLR   m 1974  23     BLR

我想在现有数据集中创建一个名为 Max.Age 的新摘要变量(它计算由 {popname, sex,year 定义的给定子组的最大年龄),如下所示:
   popname sex year age COUNTRY   max.age
329447     AUS   f 1921  23     AUS   72  
329448     AUS   f 1921  24     AUS   72
329449     AUS   f 1921  25     AUS   72
329450     AUS   f 1921  26     AUS   72
329451     AUS   f 1921  27     AUS   72
329452     AUS   f 1921  28     AUS   72
...
329532     AUS   f 1922  23     AUS   75
329533     AUS   f 1922  24     AUS   75
329534     AUS   f 1922  25     AUS   75
...        ...   .  ..   ..     ...
297729     BLR   f 1987  59     BLR   87
297730     BLR   f 1987  60     BLR   87
297731     BLR   f 1987  61     BLR   87
... 
291941     BLR   m 1973  71     BLR   78
291942     BLR   m 1973  72     BLR   78
291993     BLR   m 1974  23     BLR   78

要在 Stata 中执行此操作,可以使用 egen 命令和 by 命令,如下所示:
by State City Day, sort:
egen cnt=seq(), from(23) to(72) block(1);  

我尝试在 R 中使用 doBy 包执行此操作。这是我写的代码:
IDB <- orderBy(~popname+sex+year+age, data=IDB)
v<-lapplyBy(~sex+year, data=IDB, function(d) c(NA,max(d$age)))
IDB$Max.age <- unlist(v)

这不起作用,因为 lapplyBy 返回长度小于原始数据集 (IDB) 的聚合数据集。

有人可以为我指出如何在 R 中实现“by | egen”类型的 Stata 代码的正确方向吗?

谢谢

最佳答案

您会在 R 中发现的一件事是,做事的方法不止一种。一种方法是通过 ave 函数。

IDB$max.age <- ave(IDB$age, IDB$popname, IDB$sex, IDB$year, FUN=max)

关于r - 计算跨数据集子集的汇总统计量 [R 中 Stata 的 "bysort"的等价物是什么?],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6448927/

相关文章:

r - 与来自 R 的 SAS 数据集通信

command-line - Stata - 返回文件路径或执行文件位置的命令

javascript - 自定义Webdoc的输出

stata - 如何在 Stata 宏变量中插入换行符?

linux - 如何使用 R 将 Raspberry Pi 中存储的文件直接读取到 Window

RApache 配置无法识别使用共享库安装的 R

替换 R 中 lm() OLS 模型中的基础标准错误

具有多个固定效应的回归的 R 平方

python - Python 中的函数类似于 Stata 中 egenmore 的 xtile()

r - 有条件地向 data.frame 添加行