如何在R语言中读取文本文件并过滤非英文字符行
问题描述
有一个.txt文件内容如下:
*** Header Start *** 嘀攀爀猀椀漀渀倀攀爀猀椀猀琀㨀 ഀഀ LevelName: Session 䰀攀瘀攀氀一愀洀攀㨀 䈀氀漀挀欀ഀഀ LevelName: Trial 䰀攀瘀攀氀一愀洀攀㨀 匀甀戀吀爀椀愀氀ഀഀ LevelName: LogLevel5 䰀攀瘀攀氀一愀洀攀㨀 䰀漀最䰀攀瘀攀氀㘀ഀഀ LevelName: LogLevel7 䰀攀瘀攀氀一愀洀攀㨀 䰀漀最䰀攀瘀攀氀㠀ഀഀ
需要读取文件并移除所有含乱码的行,仅保留英文行作为数据框的一列。但使用read.table、readLines、scan或read_delim读取时,因乱码出现如下异常输出:
[1] "ÿþ*" "H" "S" "*" "\n" "V" "1" "\n" "L" "S" "\n" "L" "B" "\n" "L" "T" "\n" [18] "L" "S" "\n" "L" "L" "\n" "L" "L" "\n" "L" "L" "\n" "L" "L" "\n" "L" "L" [35] "\n" "L" "L" "\n" "E" "G" "\n" "S" "0" "\n" "S" "1" "\n" "S" "8" "4" "P" [52] "\n" "S" "9" "\n" "S" "1" "\n" "D" "G" "\n" "R" "-" "\n" "G" "1" "\n" "D"
如何无需手动删除乱码行解决该问题?
解决方案
指定正确编码读取文件
输出开头的ÿþ是UTF-16LE编码的BOM(字节顺序标记),读取时指定对应编码可避免字符被拆分:lines <- readLines("your_file.txt", encoding = "UTF-16LE")过滤乱码行
使用正则表达式筛选仅包含ASCII字符的行,排除含非ASCII乱码的内容,同时移除空行:clean_lines <- lines[grepl("^[[:ascii:]]+$", lines) & lines != ""]转换为数据框
将清理后的行转为数据框的一列:# Base R 实现 df <- data.frame(Level_Info = clean_lines, stringsAsFactors = FALSE) # Tidyverse 实现(需先加载tibble包) library(tibble) df <- tibble(Level_Info = clean_lines)
最终结果
处理后的数据框仅保留以下有效行:
*** Header Start *** LevelName: Session LevelName: Trial LevelName: LogLevel5 LevelName: LogLevel7
内容的提问来源于stack exchange,提问作者jc2525
相关产品推荐
相关产品推荐

