我有一個數據(大數據125000行,〜20 MB),其中某些具有特定字符串的行需要刪除,並且在讀取過程中需要選擇某些列。fread連同grepl
首先,我發現grepl
函數無法正常工作,因爲fread
使數據成爲一列,這也表示在此question中。
的示例數據可以發現here(由以下@akrun建議)和這樣
頭(sum_data)中的數據的報頭
TRIAL : 1 3331 9091
TRIAL : 2 1384786531 278055555
2 0.10 0.000E+00 -0.0047 -0.0168 -0.9938 -0.0087 -0.0105 -0.9709 0.0035 0.0079 -0.9754 0.0081 0.0023 0.9997 -0.135324E-09 0.278754E-01
2 0.20 0.000E+00 -0.0121 0.0002 -0.9898 -0.0364 -0.0027 -0.9925 -0.0242 -0.0050 -0.9929 0.0029 -0.0023 0.9998 -0.133521E-09 0.425567E-01
2 0.30 0.000E+00 0.0193 -0.0068 -0.9884 0.0040 0.0139 -0.9782 -0.0158 0.0150 -0.9814 0.0054 -0.0008 0.9997 -0.134103E-09 0.255356E-01
2 0.40 0.000E+00 -0.0157 0.0183 -0.9879 -0.0315 -0.0311 -0.9908 -0.0314 -0.0160 -0.9929 0.0040 0.0010 0.9998 -0.134819E-09 0.257300E-01
2 0.50 0.000E+00 -0.0402 0.0300 -0.9832 -0.0093 0.0269 -0.9781 -0.0326 0.0247 -0.9802 0.0044 -0.0010 0.9997 -0.131515E-09 0.440350E-01
我試圖讀取fread
和所使用的數據grepl
用於刪除行;
files <-dir(pattern = "*sum.txt",full.names = FALSE)
library(data.table)
fread_files <- function(files){
sum_data_read <- fread(files,skip=2, sep="\t",) #seperation is tab.
df_grep <- sum_vgm_read [!grepl("TRI",sum_vgm_read$V1),] # for removing the lines that contain "TRIAL" letter in V1 column. But so far there is no V1 column is recognized!!
df <- bind_rows(df_grep) #binding rows after removing
write.table(as.data.table(df),file = gsub("(.*)(\\..*)", "\\1_new\\2", files),row.names = FALSE,col.names = TRUE)
}
最後lapply
lapply(files, fread_files)
當我perfom這一點,只有一個數據行被作爲輸出這點是怎麼回事,但我不知道是什麼創造。 感謝您的幫助!
你只是想讀取文件,刪除行並重寫文件? 或者您是否想要操作數據表或數據框? – cderv
@Titolondon感謝您的詢問。我想寫一個新文件不重寫它們,並希望有列名稱和更快的閱讀處理data.frame,因爲我有很多文件。 – Alexander
您是否嘗試過我的答案?它似乎是做你想做的: 1.讀取文件 2.刪除行 3.在沒有「TRIAL」行的情況下寫入新文件 缺少什麼? 順便說一句,我沒有看到您的示例數據中的colname。你想要什麼名字? – cderv