8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

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

Brentspine 2月前

36 0

我正在将大量 stata 代码转换为 R。在 stata 中,如果我有一系列变量,例如 var1、var2、var3 等,并且我想更改(重新编码)特定值(如果它出现在任何变量中)......

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

在 stata 中,如果我有一系列变量,例如 var1、var2、var3 等,并且我想更改(重新编码)某个特定值(如果它出现在任何变量中),我可以使用语句 recode 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

最小值 第 1 区 中位数 平均值 第 3 区 最大值 NA 43.00 52.75 56.00 58.25 61.50 78.00 2

VARLIST 的内容是[1] \'data$var1\' \'data$var2\' \'data$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
}

它也没有起作用。

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

帖子版权声明 1、本帖标题:使用循环有条件地替换一系列变量的值
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Brentspine在本站《loops》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 欢迎来到 SO,但你不能通过大喊大叫来交朋友。在 tidyverse 中,有些事情类似于

  • 尝试: data[data==9999] <- NA

返回
作者最近主题: