我是一名正在过渡到 R 的 Stata 用户,我发现我很难放弃一个 Stata 拐杖。这是因为我不知道如何用 R 的“应用”函数来做等效的事情。
在 Stata 中,我经常生成一个存根名称的本地宏列表,然后遍历该列表,调用名称由这些存根名称构建的变量。
举个简单的例子,假设我有以下数据集:
study_id year varX06 varX07 varX08 varY06 varY07 varY08
1 6 50 40 30 20.5 19.8 17.4
1 7 50 40 30 20.5 19.8 17.4
1 8 50 40 30 20.5 19.8 17.4
2 6 60 55 44 25.1 25.2 25.3
2 7 60 55 44 25.1 25.2 25.3
2 8 60 55 44 25.1 25.2 25.3
and so on...
我想生成两个新变量,它们分别在年为 6时、年为 7 时和年为8 时分别取varX
和varY
的值。varX06
varY06
varX07
varY07
varX08
varY08
最终数据集应如下所示:
study_id year varX06 varX07 varX08 varY06 varY07 varY08 varX varY
1 6 50 40 30 20.5 19.8 17.4 50 20.5
1 7 50 40 30 20.5 19.8 17.4 40 19.8
1 8 50 40 30 20.5 19.8 17.4 30 17.4
2 6 60 55 44 25.1 25.2 25.3 60 25.1
2 7 60 55 44 25.1 25.2 25.3 55 25.2
2 8 60 55 44 25.1 25.2 25.3 44 25.3
and so on...
澄清一下,我知道我可以使用melt
和reshape
命令来做到这一点 - 本质上是将这些数据从宽格式转换为长格式,但我不想诉诸于此。这不是我的问题的意图。
我的问题是关于如何遍历 R 中存根名称的本地宏列表,我只是使用这个简单的示例来说明一个更通用的困境。
在 Stata 中,我可以生成存根名称的本地宏列表:
local stub varX varY
然后遍历宏列表。如果年份为 6,我可以生成一个新变量varX
或用orvarY
的值(分别)替换新变量值,依此类推。varX06
varY06
foreach i of local stub {
display "`i'"
gen `i'=.
replace `i'=`i'06 if year==6
replace `i'=`i'07 if year==7
replace `i'=`i'08 if year==8
}
最后一部分是我发现在 R 中最难复制的部分。当我编写'x'06
时,Stata 获取字符串“varX”,将其与字符串“06”连接起来,然后返回变量 varX06 的值。此外,当我编写时'i'
,Stata 返回字符串“varX”而不是字符串“'i'”。
我如何用 R 做这些事情?
我搜索了 Muenchen 的“Stata 用户的 R”,搜索了网络,并在 StackOverflow 上搜索了以前的帖子,但找不到 R 解决方案。
如果这个问题很简单,我很抱歉。如果之前已经回答过,请引导我到回复。
提前致谢,
塔拉