rbindlist - как получить дополнительный столбец с информацией об источнике? - PullRequest
0 голосов
/ 20 февраля 2019

У меня есть более 30 больших .csv файлов, хранящихся в одной папке.Я хотел бы прочитать их в R как одну data.frame / data / table со следующими критериями:

(1) первые и последние 25 строк каждого файла должны быть пропущены (количество строк отличается в каждом файле)

(2) последний столбец должен содержать уникальную информацию об источнике строки (например, filename.csv.rownumber из необработанного файла).Количество столбцов также различается в каждом файле.

Пока у меня есть это:

ASC_files <- list.files(pattern="*.csv")

read_ASC <- function(x){
ASC <-fread(x, skip=25)
return(ASC[1:(nrow(ASC)-25),])
}

ASC_list <-lapply(ASC_files, read_ASC)
ASC_all <- rbindlist(ASC_list, use.names=TRUE)

Однако я понятия не имею, как получить дополнительный столбец с информацией об источнике каждой строки ...

1 Ответ

0 голосов
/ 28 февраля 2019

Спасибо всем за комментирование моего вопроса.Наконец, я предложил следующее решение:

ASC_files <- list.files(pattern="*.asc")
ASC_all <- sapply(ASC_files, function(x) read.csv(x, header=FALSE, col.names
paste0('V', 1:1268) , sep="", stringsAsFactors = FALSE))
#adding a new column with name of the source file
ASC_all <- mapply(cbind, ASC_all, "source"=ASC_files, SIMPLIFY = FALSE)
#adding a new column with row number
ASC_all <- map(ASC_all, ~rowid_to_column(.x, var="row"))
#removing last and first 25 rows in each dataframe of the list
ASC_all <- lapply(ASC_all, function(x) x[x$row<(nrow(x)-25),])
ASC_all <- lapply(ASC_all, function(x) x[x$row>25,])
#transforming the list into a dataframe with all data
ASC_all <- rbindlist(ASC_all)
#complementing the kolumn source with the row number (result: filename.csv.rownumber)
ASC_all$file <- paste0(ASC_all$file, '.', ASC_all$row)
#removing column with row numbers
ASC_all$row <- NULL

Возможно, это не самый элегантный и эффективный код, но, по крайней мере, он работает.

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