【问题标题】:Deprecated levels warning with read.dta in RR 中带有 read.dta 的弃用级别警告
【发布时间】:2017-01-07 03:13:23
【问题描述】:

(这是一个初学者问题,但我在其他地方没有找到答案。相关帖子包括this onethis onethis one,但不知道如何将这些应用于我的案例。)

当我使用read.dta将STATA格式数据导入R时,出现警告:

> lca <- read.dta("trial.dta")

Warning message:
In `levels<-`(`*tmp*`, value = if (nl == nL) as.character(labels) else 
paste0(labels,  :
  duplicated levels in factors are deprecated

这是否仅仅意味着变量(R 中的“因子”)包含重复值?如果是这样,为什么这甚至是一个警告——这不是大多数变量的预期吗?

【问题讨论】:

  • 不,这意味着发生了类似factor(1:3, levels = c(1,1,3)) 的事情
  • 确保没有值变成NA,但您可以使用droplevels 清除重复项。或者可以尝试不同的 Stata 读取功能,例如 haven::read_dta
  • 谢谢你们!我尝试了 Haven::read.dta 函数,警告消失了。
  • 这个问题是由一个有很多零的国家名称变量引起的。 (如果我删除变量,警告就会消失)。是否因为零被视为重复级别并“弃用”到同一级别?

标签: r warnings


【解决方案1】:

试试这个:

don <- read.dta("trial.dta",convert.dates = T,convert.factors = F)
for(i in 1:ncol(don)){
    valuelabel<-attributes(don)[[6]][i]
    if(valuelabel!=""){
       label<-paste("names(attributes(don)[[11]]$",valuelabel,")",sep="")
       level<-paste("attributes(don)[[11]]$",valuelabel,sep="")
       labels=(eval(parse(text=label)))
       levels=(eval(parse(text=level)))
       if(sum(duplicated(labels)) > 0){
          doublon<-which(duplicated(labels))
          remplace<-levels[doublon]
          valueremplace<-levels[unique(labels)==names(remplace)]
          don[don[,i]%in%remplace,i]<-valueremplace
          labels<-unique(labels)
          levels<-levels[labels]
       }
    don[,i]<-factor(don[,i],levels=levels,labels=labels)
  }
}

【讨论】:

  • 您能补充说明一下该代码的作用吗?它将提高您的回答质量
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-16
  • 1970-01-01
  • 1970-01-01
  • 2021-05-30
相关资源
最近更新 更多