1 中文乱码问题
- 在Rstudio中,用 Import Dataset 导入,选择from Excel,利用readxl包导入excel 文件。
- 若Excel导入出现乱码,转换成 csv 尝试。将Excel文件另存为 csv 文件,csv文件的存放路径避免中文字符。在Rstudio中,用 Import Dataset 导入,选择from text(readr),导入 csv 文件。
若选中csv文件后显示乱码,尝试在Import Options中按Locale-Configure-Encoding-Other路径,键入GBK解决,或直接在代码中修改编码方式。
guess_encoding("example.csv")
df <- read_csv("~/input/example.csv", locale = locale(encoding = "GBK"))
若仍显示乱码,尝试将 csv 文件用 windows 记事本打开,重新另存为,此时可选择编码方式为utf-8,将另存后的 csv 文件按以上方式重新导入。
- 若csv文件中的字符串包含逗号时, 为避免逗号分隔符识别错位,使用read_csv(x, quote = “‘“)。
R数据导出csv 文件时,为避免中文乱码,选择write_excle_csv而非write_csv。
df %>% write_excel_csv("output/example.csv")
R数据导出 excel 文件时,可使用 openxlxs 包设定导出风格。
2 类型转换错误:no trailing characters
readr导入数据时会自动转换类型,出现类型转换错误时,用problems 查找问题列,针对性修改 col_types
df <- read_csv("example.csv")
# 出现no trailing characters问题时,查找存在类型转换错误的列
problems(df) %>% select(col) %>% distinct()
# 例如y列类型转换错误(如前 1000 列均为na值),自动转化为col_logical(),可尝试调整为col_character()
或其他类型再次尝试导入
df <- read_csv(
"example.csv",
col_types = cols(
x = col_double(),
y = col_character(),
z = col_skip()
)
)
将类型先统一转换成character后,再进行类型转换
df <- read_csv("example.csv",
col_types = cols(.default = col_character())
) %>% type_convert()
利用data.table::fread读取数据(不自动转换类型),再转化成 tibble 格式
df <- fread("example.csv") %>% as.tibble()
3 导入建议
为避免类型转换错误、减少不必要的列导入,建议导入时修改col_types参数。
# 查看readr默认列类型,将cols_condense(df_spec)的列类型复杂到col_types中修改,col_skip()表明需舍弃的字段
spec_csv("example.csv") %>% cols_condense()
df <- read_csv(
"example.csv",
col_types = cols(
x = col_double(),
y = col_character(),
z = col_skip()
)
)
# 最佳建议
# --------------------
# 若显示字段不完整,可以尝试以下方式获得完整列类型
spec_csv("example.csv") %>% str()
# col_only仅保留申明的变量,舍弃其他变量
df <- read_csv(
"example.csv",
col_types = cols_only(
x = col_double(),
y = col_character()
)
)