【问题标题】:What is the R equivalent function for foreach x in... in Stata [closed]Stata中foreach x in ...的R等效函数是什么[关闭]
【发布时间】:2018-09-02 11:31:58
【问题描述】:

在 Stata 中,如果我想遍历多个变量并标记所有变量,我会执行以下操作

foreach x in a c z t s {
cap label drop `x'
label define `x' 1 "Yes" 2 "No"
label values `x' `x'
}

请有人告诉我如何在 R 中做到这一点?

【问题讨论】:

  • Stata 中的 FWIW 更容易避免循环,只需转到 label def yesno 1 "Yes" 2 "No" 后跟 label values a c t z s yesno。这不会放弃现有的价值标签;它只是忽略它们。

标签: r label stata


【解决方案1】:

R 没有 Stata 那样的“标签”,也没有区分 for 循环的类型(如 Stata 的 forvaluesforeach)。您可以使用因子变量,它们有点类似于带标签的数值(并且在其建模命令中的行为类似于 Stata 的 i. 前缀符号)。您可以使用与您的 Stata 代码非常相似的方式从现有数据中创建因子变量。

我将假设您有一个名为 dat 的数据框,其中包含名为 aczts 的变量以及可能的其他变量变量。如果是这样,那么您想遍历变量的名称:

for (i in c("a", "c", "z", "t", "s")) {
    dat[[i]] <- factor(dat[[i]], levels = 1:2, labels = c("Yes", "No"))
}

如果这些名称在数据框中是唯一的(它们可能是唯一的),您也可以循环遍历数据框中变量的位置:

pos <- match(c("a", "c", "z", "t", "s"), names(dat))
for (i in pos) {
    dat[[i]] <- factor(dat[[i]], levels = 1:2, labels = c("Yes", "No"))
}

如果您的数据集中只有这些变量,您可以使用 lapply 和一些作弊符号:

dat[] <- lapply(dat, factor, levels = 1:2, labels = c("Yes", "No"))

有两个附加包提供更多类似 Stata 的标签功能:labelledHmisc,可能值得探索。但是,在大多数情况下,因素可能会给你你想要的。

【讨论】:

  • 非常感谢!
猜你喜欢
  • 1970-01-01
  • 2012-12-27
  • 1970-01-01
  • 1970-01-01
  • 2012-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多