В области Tidyverse при обработке одного фрейма данных вы хотите filter()
, а затем select()
исходных данных и для удобства добавьте, используя mutate()
, имя файла.Хороший способ фильтрации, когда есть несколько возможных значений, использует %in%
.Так что
library(tidyverse)
process_1_df <- function(df, id, condition)
select(df, columnOfInterest) %>% # only interesting column
filter(columnOfInterest %in% condition) %>% # specific rows
mutate(id = id) # add identifier
condition <- paste0("interestingCondition", 1:3)
process_1_df(df, "id", condition)
id
должен быть идентификатором - если data.frame взят из файла 'foo.txt', тогда используйте "foo.txt"
для идентификатора.Исходный вопрос пытался представить данные из нескольких файлов в виде матрицы, но это предполагает, что в каждом файле выбрано одинаковое количество интересных строк.Здесь стратегия заключается в создании фрейма данных, который содержит файл, из которого получено интересующее условие, и значение интересующего условия.Этот фрейм данных полезен при обработке нескольких файлов ...
Это работает с образцом данных, установленным как:
> condition <- paste0("interestingCondition", 1:3)
> process_1_df(df, "id", condition)
columnOfInterest id
1 interestingCondition2 id
2 interestingCondition2 id
3 interestingCondition3 id
4 interestingCondition1 id
5 interestingCondition3 id
6 interestingCondition1 id
Вы можете расширить это для обработки файла
process_1_file <- function(file_name, condition)
read_csv(file_name) %>% # better: input only columnOfInterest
process_1_df(file_name, condition)
Как предполагает @DJJ, реализация data.table process_1_file()
, вероятно, будет очень компактной и эффективной - fread(file_name)[columnOfInterest %in% condition, columnOfInterest]
Для обработки нескольких файлов используйте пакет purr
library(purrr)
process_files <- function(file_names, condition)
map(file_names, process_1_file, condition) %>%
bind_rows()
dir(pattern="*.csv") %>% process_files(condition)
Конечным результатом является один фрейм данных со столбцом интересных условий и другим столбцом, указывающим, из какого файла журнала получено интересующее условие.Этот фрейм данных «длинного» формата теперь можно обрабатывать / суммировать по желанию.