我需要將許多文件讀入R,進行一些清理,然後將它們合併爲一個數據框。這些文件基本上都是這樣開始的: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來存儲爲每個數據文件跳過適當數量的行。 – dshkol
是@ D.sen,'D'總是在'Type'列中。 – notacodr