У меня есть список, содержащий несколько кадров data.frames. Я хочу выбрать каждый n-й data.frame из списка и объединить их в один data.frame, который можно записать в csv.
Вот пример структуры списка:
one.title <- data.frame(id = '1a', title = 'first title')
one.author <- data.frame(first_name = c('Susan', 'Alice'),
last_name = c('Smith', 'Johnson') )
second.title <- data.frame(id = '2b', title = 'second_title')
second.author <- data.frame(first_name = c('Sarah', 'Mary'),
last_name = c('Davis', 'Proctor') )
one.list <- list()
one.list[[1]]$title <- one.title
one.list[[1]]$author <- one.author
one.list[[2]]$title <- second.title
one.list[[2]]$author <- second.author
Вот мое текущее решение, которое создает единственный фрейм данных для полей «авторы»:
build_author_table <- function(result.l){
list_to_df <- function(i){
x <- result.l[[i]]$author
return(x)
}
authors_df_l <-(lapply(1:length(result.l), FUN = list_to_df))
authors_df <- do.call("rbind", lapply(authors_df_l, as.data.frame))
return(authors_df)
}
Это дает результат, который я хочу:
first_name last_name
1 Susan Smith
2 Alice Johnson
3 Sarah Davis
4 Mary Proctor
Но, как вы, вероятно, можете представьте себе, что при масштабировании до тысяч записей с гораздо большими текстовыми полями в data.frame это очень медленно.
Может ли кто-нибудь предложить более быстрый и эффективный способ создания окончательного data.frame?