Извлечение части строки в список для заполнения таблицы - PullRequest
1 голос
/ 09 июля 2019

Я пытался написать код, который читает из нескольких файлов Excel в папке совпадают с именем.Я смог достичь этой части, используя код на шоу некоторый код.Столбцы в кадре данных - это id и Date.

Моя проблема заключается в том, что я хочу добавить еще один столбец с именем Code, в котором будет храниться код, извлеченный из списка файлов, для различения каждой строки.

Исходный кадр данных после перечитывания файла и объединения этих наборов данных

id                          Date              
    ExcelFile/CP1213_.xlsx  2013-05-09        
    ExcelFile/CP1213_.xlsx  2013-01-30      
    ExcelFile/CP1314_.xlsx  2013-02-14        
    ExcelFile/CP1314_.xlsx  2013-03-19        
    ExcelFile/CP1415_.xlsx  2013-02-22      
    ExcelFile/CP1415_.xlsx  2013-02-22      

В таблице ниже показано, чего я хочу достичь:

id                          Date            Code   
ExcelFile/CP1213_.xlsx      2013-05-09      CP1213  
ExcelFile/CP1213_.xlsx      2013-01-30      CP1213
ExcelFile/CP1314_.xlsx      2013-02-14      CP1314  
ExcelFile/CP1314_.xlsx      2013-03-19      CP1314  
ExcelFile/CP1415_.xlsx      2013-02-22      CP1415 
ExcelFile/CP1415_.xlsx      2013-02-22      CP1415

Вывод файловсписок: «ExcelFile / CP1213_.xlsx» «ExcelFile / CP1314_.xlsx» «ExcelFile / CP1415_.xlsx»

files <- list.files(path = "ExcelFile/", pattern   = "*.xlsx", full.names = T)



tbl <- sapply(files, read_excel, simplify=FALSE) %>% bind_rows(.id = "id") 

Ответы [ 2 ]

1 голос
/ 09 июля 2019

Основываясь на идее Ронак Шаха, вы можете использовать mutate из пакета dplyr, затем использовать basename и затем извлечь часть имени файла, используя sub из Идентификатор.

files <- list.files(path = "ExcelFile/", pattern   = "*.xlsx", full.names = T)

tbl <- sapply(files, read_excel, simplify=FALSE) %>% bind_rows(.id = "id")

tbl <- tbl %>% mutate(Code = sub("_.*", "", basename(tbl$id)))
0 голосов
/ 09 июля 2019

Вы можете использовать basename, а затем извлечь часть имени файла, используя sub

df$Code <- sub("_.*", "", basename(as.character(df$id)))

df
#                      id       Date   Code
#1 ExcelFile/CP1213_.xlsx 2013-05-09 CP1213
#2 ExcelFile/CP1213_.xlsx 2013-01-30 CP1213
#3 ExcelFile/CP1314_.xlsx 2013-02-14 CP1314
#4 ExcelFile/CP1314_.xlsx 2013-03-19 CP1314
#5 ExcelFile/CP1415_.xlsx 2013-02-22 CP1415
#6 ExcelFile/CP1415_.xlsx 2013-02-22 CP1415

Или, если вы хотите извлечь его из files

df$Code <- sub("_.*", "", basename(files))
...