2017-01-07 4 views
1

(Это вопрос для начинающих, но я не нашел ответа в другом месте. Соответствующие должности включают this one, this one и this one, но не уверены, как применить их к моему делу.)Предупреждение о недопустимых уровнях с read.dta в R

Когда я использую 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) содержат повторяющиеся значения? Если да, то почему это даже предупреждение - разве это не ожидается от большинства переменных?

+2

нет, это означает что-то вроде 'фактора (1: 3, уровней = C (1,1,3))' произошло – rawr

+0

Убедитесь, что значения не получили превратились в 'NA', но вы можете очистить дубликаты с помощью «капель». Или, возможно, попробуйте использовать другую функцию чтения Stata, например 'haven :: read_dta'. – alistaire

+0

Спасибо вам всем! Я попробовал функцию haven :: read.dta, и предупреждение исчезло. –

ответ

0

Попробуйте это:

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) 
    } 
} 
+0

Вы могли бы добавить объяснение о том, что делает этот код? это улучшит качество вашего ответа – ExDev

 Смежные вопросы

  • Нет связанных вопросов^_^