r - 将 Stata 转换为 R : collapse

标签 r data.table stata code-translation

刚遇到一个 .do我需要翻译成的文件 R因为我没有 Stata 许可证;我的 Stata 生锈了,所以有人可以确认代码正在做我认为的事情吗?

为了重现性,我将把它翻译成我在网上找到的数据集,特别是 Milk Production dataset (p004)那是 Chatterjee、Hadi 和 Price 教科书的一部分。

这是Stata代码:

collapse (min) min_protein = protein /// 
         (mean) avg_protein = protein /// 
         (median) median_protein = protein /// 
         (sd) sd_protein = protein /// 
         if protein > 2.8, by(lactatio)

这是我认为它在 data.table 中所做的事情句法:
library(data.table)
library(foreign)
DT = read.dta("p004.dta")
setDT(DT)

DT[protein > 2.8,
   .(min_protein = min(protein),
     avg_protein = mean(protein),
     median_protein = median(protein),
     sd_protein = sd(protein)),
   keyby = lactatio]

#    lactatio min_protein avg_protein median_protein sd_protein
# 1:        1         2.9    3.162632           3.10  0.2180803
# 2:        2         2.9    3.304688           3.25  0.2858736
# 3:        3         2.9    3.371429           3.35  0.4547672
# 4:        4         2.9    3.231250           3.20  0.3419917
# 5:        5         2.9    3.855556           3.20  1.9086061
# 6:        6         3.0    3.200000           3.10  0.2645751
# 7:        7         3.3    3.650000           3.65  0.4949748
# 8:        8         3.2    3.300000           3.30  0.1414214

那是对的吗?

如果我在过去的 18 个月内使用过 Stata,或者我是否安装了一个副本,这将很容易确认——希望我能听懂其中任何一个的人的耳朵。谢谢。

最佳答案

这是您的示例数据的 Stata 输出,与 data.table 相同输出:

collapse (min) min_protein = protein /// 
         (mean) avg_protein = protein /// 
         (median) median_protein = protein /// 
         (sd) sd_protein = protein /// 
         if protein > 2.8, by(lactatio)

   lactatio min_protein avg_protein median_protein  sd_protein
     1  2.9 3.162632    3.1 0.2180803
     2  2.9 3.304688    3.25 0.2858736
     3  2.9 3.371429    3.35 0.4547672
     4  2.9 3.23125     3.2 0.3419917
     5  2.9 3.855556    3.2 1.908606
     6  3   3.2         3.1 0.2645752
     7  3.3 3.65        3.65 0.4949748
     8  3.2 3.3         3.3 0.1414214

这是 data.table输出(只是为了确保我使用的是正确的数据)
    library(foreign) #reading Stata data
    data<-read.dta("p004.dta")
    setkey(setDT(data),lactatio)
    setDT(data)[protein>2.8,
                   .(min_protein=min(protein),
                     avg_protein=mean(protein),
                     median_protein=median(protein),
                     sd_protein=sd(protein)),
                   by=lactatio]

   lactatio min_protein avg_protein median_protein sd_protein
1:        1         2.9    3.162632           3.10  0.2180803
2:        2         2.9    3.304688           3.25  0.2858736
3:        3         2.9    3.371429           3.35  0.4547672
4:        4         2.9    3.231250           3.20  0.3419917
5:        5         2.9    3.855556           3.20  1.9086061
6:        6         3.0    3.200000           3.10  0.2645751
7:        7         3.3    3.650000           3.65  0.4949748
8:        8         3.2    3.300000           3.30  0.1414214
> 

关于r - 将 Stata 转换为 R : collapse,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30987995/

相关文章:

r - 设置聚合粘贴功能的折叠

R 在data.table(或ddply)中动态构建 "list"

r - 在R中将数据帧从 "wide"格式转换为 "long"格式

r - 按组填写日期的缺失行

R 将非常大的数据表列表合并到一个 data.table 中

r - 如何在 R 中获取面板数据固定效应回归的 corr(u_i, Xb)

statistics - 在 Stata 中导出 Tabstat

r - 绘制 grobs 列表

R 聚类分析和具有相关矩阵的树状图

dataset - 如何在 Stata 中计算 .dta 文件的行数和列数?