【发布时间】:2019-10-14 13:26:43
【问题描述】:
我是 R 新手,正在使用 Stata。我可以在 Stata 中使用 foreach 和 forvalue 遍历变量。
我想遍历列而不是遍历行。例如,我有名为 var1、var2、var3 的列。数据如下:
var1 var2 var3
1 1 1
2 999 3
999 2 999
我想将变量中的所有“999”值重新编码为缺失值。在Stata,我可以做到
forvalue i = 1(1)3{
replace var`i' ="NA" if var`i' =="999"
}
因此,我有这样的结果
var1 var2 var3
1 1 1
2 NA 3
NA 2 NA
另外,如果我有名为 ht、wgt、bmi 的列,我想计算列的平均值并将平均值存储在具有相应名称的新列中。数据集如下:
ht wgt bmi
154.5 43.1 18.1
164.2 63 23.4
在Stata中,我可以做到
foreach i of varlist ht wgt bmi{
gen `i'mean = mean(`i')
}
结果会是
ht wgt bmi htmean wgtmean bmimean
154.5 43.1 18.1 159.35 53.05 20.75
164.2 63 23.4 159.35 53.05 20.75
我不知道如何使用 R。
【问题讨论】:
-
你可能不需要for循环来做R中的任何一个;相应的函数很可能是矢量化的。
-
@neilfws 在我看来,Stata 代码在列上循环,因此替换可能类似于
dplyr::mutate_at()。 -
谢谢。是的,@Marius,我想遍历列而不是行。我试过使用
mutate_at()。但是,它给出了评论Evaluation error: replacement has 0 rows, data has 1492.我的代码是这样的:f1 <- function(x) dat$x[dat$x==999] <-NA dat <- mutate_at(dat,vars(var1:var21), f1) -
如果您放入数据集的小样本(请参阅stackoverflow.com/questions/5963269/…),我们将能够更好地为您提供帮助。
-
@Aaron 谢谢。我在问题中添加了简单的示例。