Gau*_*hal 5 byte-order-mark r data.table read.csv readr
有时,.CSV 文件的开头会出现字节顺序标记 (BOM)。当您使用记事本或 Excel 打开文件时,该符号不可见,但是,当您使用各种方法在 R 中读取文件时,您会在第一列的名称中看到不同的符号。这是一个例子
\n\n开头带有 BOM 的示例 csv 文件。
\n\nID,title,clean_title,clean_title_id\n1,0 - 0,,0\n2,"""0 - 1,000,000""",,0\n27448,"20yr. rope walker\nigger",Rope Walker Igger,1832700817\nRun Code Online (Sandbox Code Playgroud)\n\n通读read.csv基础 R 包
(x1 = read.csv("file1.csv",stringsAsFactors = FALSE))\n# \xc3\xaf..ID raw_title semi_clean semi_clean_id\n# 1 1 0 - 0 0\n# 2 2 "0 - 1,000,000" 0\n# 3 27448 20yr. rope walker\\nigger Rope Walker Igger 1832700817\nRun Code Online (Sandbox Code Playgroud)\n\n通读freaddata.table包中的内容
(x2 = data.table::fread("file1.csv"))\n# \xc3\xaf\xc2\xbb\xc2\xbfID raw_title semi_clean semi_clean_id\n# 1: 1 0 - 0 0\n# 2: 2 ""0 - 1,000,000"" 0\n# 3: 27448 20yr. rope walker\\rigger Rope Walker Igger 1832700817\nRun Code Online (Sandbox Code Playgroud)\n\n通读read_csvreadr包中的内容
(x3 = readr::read_csv("file1.csv"))\n# <U+FEFF>ID raw_title semi_clean semi_clean_id\n# 1 1 0 - 0 <NA> 0\n# 2 2 "0 - 1,000,000" <NA> 0\n# 3 27448 20yr. rope walker\\rigger Rope Walker Igger 1832700817\nRun Code Online (Sandbox Code Playgroud)\n\n您可以注意到变量名称 ID 前面的不同字符。
\n\n以下是对所有这些运行名称时的结果
\n\nnames(x1)\n# [1] "\xc3\xaf..ID" "raw_title" "semi_clean" "semi_clean_id"\nnames(x2)\n# [1] "\xc3\xaf\xc2\xbb\xc2\xbfID" "raw_title" "semi_clean" "semi_clean_id"\nnames(x3)\n# [1] "ID" "raw_title" "semi_clean" "semi_clean_id"\nRun Code Online (Sandbox Code Playgroud)\n\n在 中x3,前面没有任何“可见”内容ID,但是当您检查时
names(x3)[[1]]=="ID"\n# [1] FALSE\nRun Code Online (Sandbox Code Playgroud)\n\n如何在每种情况下删除这些不需要的字符。\nPS: 请添加更多读取 csv 文件的方法、面临的问题和解决方案。
\n对于基本 R 中的 read.csv 使用:
\n\nx1 = read.csv("file1.csv",stringsAsFactors = FALSE, fileEncoding = "UTF-8-BOM")\nRun Code Online (Sandbox Code Playgroud)\n\n对于恐惧,请使用:
\n\nx2 = fread("file1.csv")\nsetnames(x2, "\xc3\xaf\xc2\xbb\xc2\xbfID", "ID")\nRun Code Online (Sandbox Code Playgroud)\n\n对于 read_csv,请使用:
\n\nx3 = readr::read_csv("file1.csv")\nsetDT(X3) #convert into data tables, so that setnames can be used\nsetnames(x3, "\\uFEFFID", "ID")\nRun Code Online (Sandbox Code Playgroud)\n\n一种非基于 R 的解决方案是在 Notepad++ 中打开文件,将编码更改为“Encoding in UTF-8 without BOM”后保存文件
\n