Объединить содержимое пары файлов с общей частью имени файла - PullRequest
0 голосов
/ 03 апреля 2020

У меня есть несколько файлов, названных таким образом:

  1223_1_myCount.txt   
  1223_1_myCount2.txt       
  1223_2_myStatistic.txt
  1223_2_myDiscarded.txt  
  1223_3_myExample.txt    
  1223_3_myStatistic.txt   
  ................     

на общую сумму 1000 пар файлов. Есть ли способ объединить содержимое файлов по два, сопоставив 1 , одинаково для 2 , для 3 , который является единственной частью общее имя файла в паре? Для каждой комбинации содержимого я хотел бы также записать ее в файл.

Заранее спасибо

1 Ответ

1 голос
/ 04 апреля 2020

Могут быть более элегантные способы сделать это, но следующий подход должен работать:

library(readtext)
library(dplyr)
library(purrr)
library(stringr)

Получить имена файлов из вашего рабочего каталога. Следующий код предполагает, что там существуют только интересующие вас файлы. В противном случае вы можете фильтровать с помощью grep(".txt",file_names) et c.

file_names <- list.files(full.names = F)

Считывать файлы из списка file_names в кадр данных df как строки, используя map_dfr from purrr

df  <- map_dfr(file_names,readtext)

Создать новую переменную file_index для использования с group_by для объединения текста из файлов с идентичным значением file_index (1, 2 или 3) , Используйте str_c, чтобы свернуть строки. Вы можете изменить шаблон для combo_file_name в пределах paste, если вы хотите по-другому назвать файлы, содержащие объединенный текст

combo_data <- df %>%  mutate(file_index = sapply(strsplit(doc_id, "_"), "[", 2)) %>% group_by(file_index) %>% 
              summarize(combo_file_name = paste("combo_file",unique(file_index),sep="_") , combo_text = str_c(text, collapse = ", ")) %>%
              ungroup() %>% select(combo_file_name,combo_text)

Создать функцию для записи файлов, используя combo_data в качестве входных данных и сохранение файлов как combo_1.txt, combo_2.txt et c.

write_file <- function (df_in){
  fileConn <- file(paste(df_in[1],".txt",sep=""))
  writeLines(df_in[2], fileConn)
  close(fileConn)
}

apply(combo_data,1,write_file)

Используйте getwd(), чтобы найти рабочий каталог, в котором сохранены объединенные файлы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...