Изменить кодировку акцентированных символов в метках значений

У меня очень тяжелые времена с акцентированными символами в файле статистики, который я должен импортировать в R. Я решил одну проблему здесь , но есть другая проблема.

После импорта, когда я используюlookforв помеченном пакете я получаю эту ошибку.

      remotes::install_github("sjkiss/cesdata")
library(cesdata)
data("ces19web")
library(labelled)
look_for(ces19web, "vote")
        invalid multibyte string at '<e9>bec Solidaire'

Теперь я могу найти одну метку значения с этой меткой, но на самом деле она отображается правильно, поэтому я не знаю, что происходит.

      val_labels(ces19web$pes19_provvote)

Но есть и другие проблемные метки значений, которые вызывают другие проблемы. Например, эту проблему вызывают метки значений для 13-й переменной.

      # This works fine
ces19web %>% 
  select(1:12) %>% 
  look_for(., "[a-z]")
# This chokes

ces19web %>% 
  select(1:13) %>% 
  look_for(., "[a-z]")

# See the accented character
val_labels(ces19web[,13])

Я придумал такой способ замены акцентированных символов второго типа.

      names(val_labels(ces19web$cps19_imp_iss_party))<-iconv(names(val_labels(ces19web$cps19_imp_iss_party)), from="latin1", to="UTF-8")

И это даже решает проблему дляlook_for()

      #This now works!
ces19web %>% 
  select(1:13) %>% 
  look_for(., "[a-z]")

Но что мне нужно, так это способ перебрать все имена всех меток значений и сделать это преобразование для всех неумелых акцентированных символов.

Это так близко, но я не знаю, как сохранить результаты этого в качестве новых имен для меток значений.

      ces19web %>% 
#map onto all the variables and get the value labels
  map(., val_labels) %>% 
#map onto each set of value labels
 map(., ~{
#Skip if there are no value labels
    if (!is.null(.x)){
#If not convert the names as above 
names(.x)<-iconv(names(.x), from="latin1", to="UTF-8")
}
    }) ->out
#Compare the 16th variable's value labels in the original
ces19web[,16]
#With the 16th set of value labels after the conversion function above
out[[16]]

Но как сделать, чтобы это преобразование действительно сохранялось в исходном наборе данных?

Спасибо!

0 ответов

Другие вопросы по тегам