【发布时间】:2015-09-08 09:06:22
【问题描述】:
刚刚遇到一个.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 的帮助文件(例如、collapse),以帮助澄清代码。
-
是的,我读到了,这就是为什么我认为我提供的
R代码是正确的。只是希望得到对这两种语言相当熟悉的人的确认。 -
100% 正确。但是,如果您提供示例数据,我可以重现输出。
-
您的翻译很好,但重复了很多 varname。你可以用一个命名的函数列表来做一些事情,比如
DT <- data.table(id=1:3)[,.(x=sample(10,5)),by=id]; DT[,lapply(list(minx = min, meanx = mean, medx = median, sdx = sd),function(f)f(x)),by=id] -
@MichaelChirico 仅供参考,有一个 statar 包可能有助于将 stata 转换为 R
标签: r data.table stata code-translation