RStudio下将目录提取的TXT转换为含日期时间列的CSV文件
解决R中目录TXT转CSV的列拆分问题
我在RStudio里需要按文件修改日期做标识,已经把目录内容导出成TXT文件,但尝试多种代码转CSV时都出警告,没法把内容拆分成Mode、Date、Time、Length、Name这几列并导出成CSV。
我的TXT文件内容如下:
Mode LastWriteTime Length Name ---- ------------- ------ ---- -a---l 11/30/2022 4:08 PM 13823 TT3 - 2022-11-30 16-08-36.PL3 -a---l 11/30/2022 4:08 PM 13823 TT3 - 2022-11-30 16-08-46.PL3 -a---l 11/30/2022 4:08 PM 13823 TT3 - 2022-11-30 16-08-55.PL3 -a---l 11/30/2022 4:09 PM 13823 TTT3 - 2022-11-30 16-09-04.PL3
期望的列格式:
Mode -a---l Date 11/30/2022 Time 4:08 PM Length 13823 Name TT3 - 2022-11-30 16-08-36.PL3
解决方案:用固定宽度读取处理
你的TXT是固定宽度格式,不是普通的分隔符格式,所以不能直接用read.csv这类函数。可以用R的基础包或readr包按列的宽度来读取,拆分出需要的列:
方法1:用基础包read.fwf
# 读取固定宽度文件,跳过前两行(表头和分隔线) file_data <- read.fwf("你的文件名.txt", widths = c(10, 10, 12, 10, 50), # 对应Mode、Date、Time、Length、Name的宽度 skip = 2, stringsAsFactors = FALSE) # 设置列名 colnames(file_data) <- c("Mode", "Date", "Time", "Length", "Name") # 导出为CSV write.csv(file_data, "输出文件名.csv", row.names = FALSE)
方法2:用readr包的read_fwf(更灵活)
如果安装了readr包,用这个方法更精准:
library(readr) # 定义各列的起始和结束位置(根据TXT内容调整) file_data <- read_fwf("你的文件名.txt", fwf_positions(start = c(1, 12, 23, 36, 47), end = c(10, 21, 34, 45, Inf)), skip = 2, col_names = c("Mode", "Date", "Time", "Length", "Name")) # 导出CSV write_csv(file_data, "输出文件名.csv")
说明
- 若列拆分不准确,调整
widths或start/end的数值即可,对着TXT内容数清楚每列的起始和结束位置就行。 skip=2是跳过前两行的表头和分隔线,直接读取数据行。
内容的提问来源于stack exchange,提问作者Abo Yamen
相关产品推荐
相关产品推荐

