В R у меня есть 10 текстовых файлов фиксированной ширины, разделенных на 8 частей.Как я могу вытащить 80 файлов, разделить их на соответствующие файлы и объединить части? - PullRequest
0 голосов
/ 12 сентября 2018

Итак, у меня есть 80 файлов в формате имен файлов:

P.A3588.ACO.CCLF0.ROW1.ROW30000
P.A3588.ACO.CCLF1.ROW1.ROW30000
P.A3588.ACO.CCLF0.ROW30001.ROW60000

Существует 80 текстовых файлов фиксированной ширины: 8 частей для каждого из 10 номеров CCLF (CCLF0, CCLF1, ..., CCLF9). Я хочу иметь возможность группировать по номеру CCLF, применять вектор ширины столбца и связывать строки частей CCLF.

Ниже то, что я пробовал до сих пор. Это не работает, но дает представление о том, что я пытаюсь.

filenames <- list.files(dataPath)
names <- substr(filenames,13,17)

CCLF1_width <- c(13,6,11,2,10,10,1,1,7,7,2,17,1,2,2,4,1,10,10,10,10,10,2,10,10,10,11,2,2,1,1,1)
CCLF2_width <- c(13,10,11,2,10,10,4,10,5,11,6,10,10,24,17,2,2,2,2,2)
CCLF3_width <- c(13,11,2,2,7,10,11,6,10,10,1)
CCLF4_width <- c(13,11,2,1,2,7,11,6,10,10,7,1)
CCLF5_width <- c(13,10,11,2,10,10,3,2,2,1,2,10,10,5,15,1,7,10,10,2,2,2,10,10,40,11,17,24,2,2,2,2,2,2,7,7,7,7,7,7,7,7,1)
CCLF6_width <- c(13,10,11,2,10,10,1,2,10,10,5,15,1,10,10,2,2,2,10,10,40,11,17,2)
CCLF7_width <- c(13,11,11,2,10,2,20,1,1,24,9,2,20,13,2,10,10,12,9)
CCLF8_width <- c(11,2,3,5,10,1,1,3,2,2,10,10,10,30,15,40,1,1)
CCLF9_width <- c(11,11,10,10,12)
CCLF0_width <- c(11,11)

for (i in length(filenames)){
  assign(paste0(substr(filenames,13,17)), read_fwf(grepl("CCLF1",filenames),paste0(i,"_width")))
  }

1 Ответ

0 голосов
/ 12 сентября 2018

Вы можете использовать list.files с аргументом recursive = True и full.names = TRUE, чтобы получить путь к файлу всех 80 текстовых файлов, а затем использовать lapply или for с read.table, чтобы прочитать все файлы в одном list, который имеет 80 элементов, используйте do.call(rbind,your_list) для объединения списка в один фрейм данных.

filename<-list.files(folder_path,recursive = T,pattern = ".txt",full.names = T)
all_file<-lapply(filename,read.table)
df<-do.call(rbind,all_file)
...