【发布时间】:2017-09-14 15:28:10
【问题描述】:
我需要将许多文件读入 R,进行一些清理,然后将它们组合成一个数据帧。文件基本上都是这样开始的:
=~=~=~=~=~=~=~=~=~=~=~= PuTTY log 2016.07.11 09:47:35 =~=~=~=~=~=~=~=~=~=~=~=
up
Upload #18
Reader: S1 Site: AA
--------- upload 18 start ---------
Type,Date,Time,Duration,Type,Tag ID,Ant,Count,Gap
E,2016-07-05,11:45:44.17,"upload 17 complete"
D,2016-07-05,11:46:24.69,00:00:00.87,HA,900_226000745055,A2,8,1102
D,2016-07-05,11:46:43.23,00:00:01.12,HA,900_226000745055,A2,10,143
带有列标题的行是"Type,Date,Time,Duration,Type,Tag ID,Ant,Count,Gap"。数据应该有 9 列。问题是每个文件的标题字符串上方的行数是不同的,所以我不能简单地使用skip = 5。我也只需要以"D,"开头的行,其他都是消息,而不是数据。
阅读我的文件的最佳方法是什么,确保我有 9 列并跳过所有垃圾?
我一直在使用readr() 包中的read_csv 函数,因为到目前为止它产生的格式问题最少。但是,我对任何新想法持开放态度,包括以"D," 开头的行的阅读方式。我玩弄过使用read.table 和skip = grep("Type," readLines(i)),但它似乎没有正确找到标题字符串。这是我的基本代码:
dataFiles <- Sys.glob("*.*")
datalist <- list()
for (i in dataFiles) {
d01 <- read_csv(i, col_names = F, na = "NA", skip = 35)
# do clean-up stuff
datalist[[i]] <- d
}
【问题讨论】:
-
type列中的值d是否一致? -
您能否使用可重现的数据重新处理您的问题,以便其他人可以测试它?原则上,您走在正确的道路上,因为这是一个可以通过读取数据子集(使用
read_csv中的n_max参数)作为临时数据并使用 grep 存储索引来解决的问题为每个数据文件跳过适当的行数。 -
是的@D.sen,
D总是在Type列中。 -
看起来我的文件中标题行上方有时有几行读取
"Type 'HE' for help"。这会导致任何搜索"Type"的解决方案都失败。谁能告诉我正确的正则表达式来搜索仅包含单词“Type”而没有其他字符的行? @D.sen、@bmosov01、@You-lee? -
像 You-leee 在他们的
grep中那样包含,怎么样。即Type,?