使用循环有条件地替换一系列变量的值

问题描述 投票:0回答:1

我正在将大量的 stata 代码转换为 R。

在 stata 中,如果我有一系列变量,例如 var1、var2、var3 等,并且我想更改(重新编码)出现在任何变量中的特定值,我可以使用以下语句来实现 重新编码 var*(9999 = -9)。在这种情况下,我想将变量系列中的所有 9999 更改为 NA。

这是我尝试过的代码

data = data.frame(var1=c(5, 56, 9999, 56, 78, 51),
              var2=c( 9999, 56, 43, 56, 78, 9999),
              var3=c(5, 34, 56, 78, 76, 79))
 varlist=gsub(" ","",paste("data$var",1:3,sep=""))
 varlist
 summary(data$var2)
 for (v in varlist){
   v[v=="9999"] = NA
 }
summary(data$var2)
data$var2[data$var2==9999] = NA
summary(data$var2)

循环不起作用,单个分配(data$var2[data$var2==9999] = NA)确实如三个摘要(data$var2)所示:

最小。第一曲。 第三曲区中位数平均值。 最大限度。 43 56 67 3372 7519 9999

最小。第一曲。 第三曲区中位数平均值。 最大限度。 43 56 67 3372 7519 9999

最小。第一曲。 第三曲区中位数平均值。 最大限度。 不适用的 43.00 52.75 56.00 58.25 61.50 78.00 2

VARList 的内容是 [1]“数据$var1”“数据$var2”“数据$var3”

我还根据我在 StackOverflow 上发现的内容尝试了以下循环(https://forum.posit.co/t/using-variables-names-in-loops/128653/2):

for (i in 1:3) {
  variable = paste0("data$var", i)
  variable[variable==9999] = NA
}

它也不起作用。

显然我在这里遗漏了一些东西。

r loops substitution
1个回答
0
投票

尝试:

data[data==9999] <- NA

© www.soinside.com 2019 - 2024. All rights reserved.