如何解决使用随机数量的空格读取文件
我需要读取几个以随机数量的空格作为分隔符的文件。
数据总是有 4 列,并且总是用 Whitespace > 1
分隔。
Whitespace = 1
在列中用作普通空格,但不是分隔符。
数据
File Name Time Status
Let_L12M.xlsm NameA NameAB 2021-02-09 13:15:50 open
Let_L12M.xlsm NameC NameCA NameCB 2021-05-10 07:19:21 open
Let_L12M.xlsm NameD NameDA NameDB 2021-05-10 07:21:35 open
Let_L12M.xlsm NameA NameAB 2021-05-10 11:11:23 open
我尝试了 strip.white.space
、read_table
、gsub
等的变体,但无法使其正常工作。
解决方法
1) 用逗号替换 2 个或更多空格的重复并作为 csv 读入。
# L <- readLines("myfile.txt")
L <- readLines(textConnection(Lines))
read.csv(text = gsub(" +",",L))
给予:
File Name Time Status
1 Let_L12M.xlsm NameA NameAB 2021-02-09 13:15:50 open
2 Let_L12M.xlsm NameC NameCA NameCB 2021-05-10 07:19:21 open
3 Let_L12M.xlsm NameD NameDA NameDB 2021-05-10 07:21:35 open
4 Let_L12M.xlsm NameA NameAB 2021-05-10 11:11:23 open
2) 因为内部空间是有规律的,即字段内部分别有 0、?、1 和 0 空间,我们可以交替使用正则表达式解析它。只要这种模式成立,即使字段仅由一个空格分隔,这也将起作用。在这种情况下,我们单独处理标题。将 text=Lines
替换为您的文件名,如 (1) 中的注释中所示以用于文件。
library(gsubfn)
pat <- "^(\\S+) +(.*) +(\\S+ \\S+) +(\\S+)$"
read.pattern(text = Lines,pattern = pat,skip = 1,col.names = read.table(text = Lines,nrow = 1))
注意
Lines <- "File Name Time Status
Let_L12M.xlsm NameA NameAB 2021-02-09 13:15:50 open
Let_L12M.xlsm NameC NameCA NameCB 2021-05-10 07:19:21 open
Let_L12M.xlsm NameD NameDA NameDB 2021-05-10 07:21:35 open
Let_L12M.xlsm NameA NameAB 2021-05-10 11:11:23 open"
,
用文件名替换输入:
library(data.table)
DT <- fread("File Name Time Status
Let_L12M.xlsm NameA NameAB 2021-02-09 13:15:50 open
Let_L12M.xlsm NameC NameCA NameCB 2021-05-10 07:19:21 open
Let_L12M.xlsm NameD NameDA NameDB 2021-05-10 07:21:35 open
Let_L12M.xlsm NameA NameAB 2021-05-10 11:11:23 open",sep = "",header = FALSE)
DT <- DT[,tstrsplit(V1," {2,}")] #match two or more blanks
setnames(DT,unlist(fread("File Name Time Status
Let_L12M.xlsm NameA NameAB 2021-02-09 13:15:50 open
Let_L12M.xlsm NameC NameCA NameCB 2021-05-10 07:19:21 open
Let_L12M.xlsm NameD NameDA NameDB 2021-05-10 07:21:35 open
Let_L12M.xlsm NameA NameAB 2021-05-10 11:11:23 open",nrows = 1,header = FALSE)))
DT
# File Name Time Status
#1: Let_L12M.xlsm NameA NameAB 2021-02-09 13:15:50 open
#2: Let_L12M.xlsm NameC NameCA NameCB 2021-05-10 07:19:21 open
#3: Let_L12M.xlsm NameD NameDA NameDB 2021-05-10 07:21:35 open
#4: Let_L12M.xlsm NameA NameAB 2021-05-10 11:11:23 open
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。