привязать строки в списке элементов к списку data.frame - PullRequest
3 голосов
/ 07 ноября 2019

У меня есть список элементов R, и я хочу связать строку со всеми элементами в списке. Каждая строка привязывается к data.frame в зависимости от класса столбца. Фактические данные довольно велики, и каждый класс имеет разные столбцы. Вот пример

df_list <- list()
df_list[[1]] <- data.frame(Class = "x", y = 1, stringsAsFactors = F)
df_list[[2]] <- data.frame(Class = "x", y = 2, stringsAsFactors = F)
df_list[[3]] <- data.frame(Class = "a", y = 3, stringsAsFactors = F)
df_list[[4]] <- data.frame(Class = "x", y = 4, stringsAsFactors = F)
df_list[[5]] <- data.frame(Class = "a", y = 5, stringsAsFactors = F)

Желаемый вывод, выглядящий так, как будто это делается программно

df_list_out <- list()

df_list_out[[1]] <- bind_rows(data.frame(Class = "x", y = 1, 
                                         stringsAsFactors = F),
                              data.frame(Class = "x", y = 2, 
                                          stringsAsFactors = F),
                              data.frame(Class = "x", y = 4, 
                                           stringsAsFactors = F))


df_list_out[[2]] <- bind_rows(data.frame(Class = "a", y = 3, 
                                           stringsAsFactors = F),
                              data.frame(Class = "a", y = 5, 
                                         stringsAsFactors = F))

Ответы [ 2 ]

3 голосов
/ 07 ноября 2019

Одним из способов будет rbind список данных вместе, а затем split

temp <- do.call(rbind, df_list)
split(temp, temp$Class)

#$a
#  Class y
#3     a 3
#5     a 5

#$x
#  Class y
#1     x 1
#2     x 2
#4     x 4

В dplyr мы можем сделать

library(dplyr)

df_list %>% bind_rows() %>% group_split(Class) 
1 голос
/ 07 ноября 2019

Вы можете lapply() по вектору "Class" es и, таким образом, добиться, чтобы за один раз обрабатывался только один "Class".

lapply(c("x", "a"), function(x) do.call(rbind, df_list[Map(`[[`, df_list, "Class") == x]))
# [[1]]
#   Class y
# 1     x 1
# 2     x 2
# 3     x 4
# 
# [[2]]
#   Class y
# 1     a 3
# 2     a 5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...