You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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高度兼容,有时对葡语特殊字符支持更好)
  • 检查secoessecoes_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

火山引擎 最新活动