R语言中文字序列转数值序列及葡语政府数据集处理问题
解答你的两个R语言问题
一、关于葡萄牙语数据集的导入优化
先看你提供的导入代码,思路是完全正确的——指定ISO-8859-1编码适配葡萄牙语特殊字符,过滤目标城市数据,再给列重命名。这里给你几个优化建议,同时帮你排查可能遇到的小问题:
优化后的代码示例
library(tidyverse) # 先定义列名,后续直接复用更清晰 col_names <- c("num_zona", "nome_local", "endereco", "nome_municipio", "secoes", "secoes_esp") locais_vot_SP <- read_delim( file = "https://raw.githubusercontent.com/camilagonc/votacao_secao/master/locais_vot_SP.csv", locale = locale(encoding = "ISO-8859-1"), delim = ",", col_names = col_names, # 直接在读取时指定列名,省去后续单独赋值步骤 skip = 0 # 如果原数据集第一行不是表头,这里改成1即可,根据实际情况调整 ) %>% filter(nome_municipio == "VINHEDO") # 用重命名后的列名,可读性更强
常见问题排查
- 如果导入后仍出现乱码,可以尝试把编码换成
"Windows-1252"(和ISO-8859-1高度兼容,有时对葡语特殊字符支持更好) - 检查
secoes和secoes_esp列的类型,如果是数字格式却被识别为字符,可追加mutate(across(c(secoes, secoes_esp), as.numeric))统一转换
二、在R中将文字序列转换为数值序列
根据文字序列的不同类型,分享几种常用的处理方法:
1. 文字本身是数字字符(比如"1", "2", "3")
直接用as.numeric()转换即可,结合dplyr还能批量处理多列:
# 示例数据 df <- tibble(text_num = c("10", "25", "33", "NA")) # 转换为数值列 df <- df %>% mutate(num_col = as.numeric(text_num))
注:如果遇到因子类型的数字,需要先转成字符再转数值,即as.numeric(as.character(x))。
2. 文字是分类标签(比如"Baixo", "Médio", "Alto"对应0,1,2)
方法1:用有序因子映射数值
适合有明确顺序的分类:
df <- tibble(cat_text = c("Baixo", "Médio", "Alto", "Médio")) df <- df %>% mutate( cat_factor = factor(cat_text, levels = c("Baixo", "Médio", "Alto"), ordered = TRUE), num_col = as.numeric(cat_factor) # 返回1,2,3,对应levels的顺序 )
如果想从0开始计数,改成as.numeric(cat_factor) - 1即可。
方法2:用case_when()自定义数值映射
灵活性更高,适合非顺序或需要自定义数值的分类:
df <- df %>% mutate(num_col = case_when( cat_text == "Baixo" ~ 0, cat_text == "Médio" ~ 1, cat_text == "Alto" ~ 5, # 可以随意指定对应数值 TRUE ~ NA_real_ # 处理未匹配到的情况 ))
方法3:用forcats包快速重编码
如果是因子类型的分类文字,用fct_recode更高效:
library(forcats) df <- df %>% mutate( cat_factor = fct_recode(cat_text, "0" = "Baixo", "1" = "Médio", "5" = "Alto"), num_col = as.numeric(as.character(cat_factor)) )
内容的提问来源于stack exchange,提问作者Camila Gonçalves




