Как объединить уровни факторов из двух пустых data.frames?r объединить уровни факторов из нескольких данных.frame
У меня есть большой набор данных, разделенных на отдельные файлы. Мне нужен data.frame, который будет иметь все возможные уровни для столбцов факторов, но я не могу загружать все части сразу, только по частям.
Есть ли способ сделать что-то вроде:
data_structure = NULL
for (chunk_i in chunks){
# load chunk_i data
if(is.null(data_structure)){
data_structure = data_i
} else {
# at this line factor levels will NOT be combined as I expect
# but instead factor levels from 'data' will be stored to 'data_structure'
data_structure = rbind(data_structure, data)
}
rm(data)
# empty data frame, since I can't keep all data in memory
# I want to keep only metadata, like factor levels
data_structure = data_structure[0, ]
}
И это data_structure необходимо, чтобы позже convert factors to binary columns так:
result_i = model.matrix(~ . + 0, data=data_i, contrasts.arg =
lapply(data_structure, contrasts, contrasts=FALSE))
Если уровни фактора А собранные со всех частей данных, то я может быть уверен, что result_i будет иметь точно такие же двоичные столбцы, что и все остальные части данных, даже если в этом конкретном случае data_i имеет меньше уровней факторов в некоторых столбцах.
UPDATE
Сейчас я использую это решение:
all_levels = list()
for_each_chunk(function(data) {
data_levels = Filter(Negate(is.null), sapply(data, levels))
factor_names = unique(c(names(all_levels), names(data_levels)))
lapply(factor_names, FUN=function(name){
all_levels[[name]] <<- unique(c(all_levels[[name]], data_levels[[name]]))
})
})
Не так элегантно, как для меня, но не нашли ничего лучшего пока.
Пожалуйста, добавьте источник вашего 'stratified' функции. –
Привет, это выглядит слишком сложно. – Serhiy
Привет, это не так сложно, как кажется. Просто скопируйте эту функцию и запустите ее, вы сможете получить к ней доступ, как и любую другую функцию в R-Studio, и она будет отображать фрагменты для вас. И как указал Паскаль, я обнаружил, что нашел эту функцию: https://gist.github.com/mrdwab/6424112 – NEO