Я работаю с большим фреймом данных, который извлекается из озера данных, которое мне нужно подмножество в соответствии с несколькими разными столбцами и провести анализ. Основные поднабовки взяты из внешнего файла Excel, который я прочитал, и создаю все возможные комбинации. Я хочу, чтобы что-то пробило каждый из этих столбцов и соответствующим образом подмножило мои данные.R - Подмножество Dataframe с программно построенной формулой
Несколько subsettings следовать аналогичной формы для:
data_settings <- data.frame(country = rep(c('DE','RU','US','CA','BR'),6),
transport=rep(c('road','air','sea')),
category = rep(c('A','B')))
И мое озеро данных экстракт имеет форму, как:
df <- data.frame(country = rep(unique(data_settings$country),6),
transport = rep(unique(data_settings$transport),10),
category = rep(c('A','B'),15),
values = round(runif(30) * 10))
мне нужно подмножество данных по каждому из строк в моем кадре данных data_settings
, поэтому я построил цикл, который строит формулу в соответствии с тем, что находится в моем фрейме данных data_settings
.
for(i in 1:nrow(data_settings)){
sub_string <- paste0(names(data_settings[1]), '==', data_settings[i,1])
for(j in 2:ncol(data_settings)){
col <- names(data_settings)[j]
val <- as.character(data_settings[i,j])
sub_string <- paste0(sub_string, ' & ', col," == ","'",val,"'")
}
df_sub <- subset(df, formula(sub_string))
}
Это успешно строит свои строки, которые я пытаюсь перейти к formula
или as.formula
, но я получаю сообщение об ошибке в этой точке. Я пробовал несколько разных формулировок без каких-либо успехов. В моем фактическом случае есть тысячи комбинаций с разными столбцами и значениями для фильтрации.
Заранее благодарим за вашу помощь!
Это работает так, как я раньше даже не рассматривал, но он немного медленнее, чем ожидалось. – hubbs5
Вы можете попробовать слияние данных.table, чтобы узнать, если он быстрее: 'library (data.table); merge (data.table (data_settings, key = names (data_settings)), df) ' –