У меня есть список P 326, содержащих DataFrames, как показано ниже,


p326 <- list(Class = structure(list(Var1 = structure(c(1L, 1L, 1L, 1L, 
1L), .Label = "B", class = "factor"), Var2 = structure(1:5, .Label = c("GLP1", 
"Insulin, Fast Acting", "Metformin/SU", "Others", "SGLT"), class = "factor"), 
    Freq = c(18.1818181818182, 9.09090909090909, 9.09090909090909, 
    36.3636363636364, 27.2727272727273)), class = "data.frame", row.names = c(NA, 
-5L)), Product = structure(list(Var1 = structure(c(1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = "B", class = "factor"), 
    Var2 = structure(1:11, .Label = c("Product 100", "Product 102", 
    "Product 103", "Product 106", "Product 25", "Product 26", 
    "Product 28", "Product 75", "Product 87", "Product 94", "Product 99"
    ), class = "factor"), Freq = c(9.09090909090909, 9.09090909090909, 
    9.09090909090909, 9.09090909090909, 9.09090909090909, 9.09090909090909, 
    9.09090909090909, 9.09090909090909, 9.09090909090909, 9.09090909090909, 
    9.09090909090909)), class = "data.frame", row.names = c(NA, 
-11L)), Product.Family = structure(list(Var1 = structure(c(1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = "B", class = "factor"), 
    Var2 = structure(1:8, .Label = c("Product Family 19", "Product Family 20", 
    "Product Family 22", "Product Family 43", "Product Family 48", 
    "Product Family 50", "Product Family 51", "Product Family 53"
    ), class = "factor"), Freq = c(9.09090909090909, 9.09090909090909, 
    9.09090909090909, 9.09090909090909, 36.3636363636364, 9.09090909090909, 
    9.09090909090909, 9.09090909090909)), class = "data.frame", row.names = c(NA, 
-8L)), Branded.Generic = structure(list(Var1 = structure(1L, .Label = "B", class = "factor"), 
    Var2 = structure(1L, .Label = "B", class = "factor"), Freq = 100), class = "data.frame", row.names = c(NA, 
-1L)))

Поэтому, когда я пытаюсь преобразовать это в DataFrame, как показано ниже, я получаю ошибку

Ошибка: Аргумент 1 не может быть списком, содержащим фреймы данных

p326 <- bind_rows(p326, .id = 'Col')

Что я здесь делаю не так?

r
2
Dev P 2 Окт 2019 в 10:40

1 ответ

Лучший ответ

На основе сообщения об ошибке похоже, что вход - это вложенный список. Мы можем unlist один уровень с помощью recursive = FALSE, а затем используйте bind_rows.

library(dplyr)
bind_rows(unlist(p326, recursive = FALSE), .id = 'Col')

Мы можем воспроизвести ту же ошибку, используя данные, предоставленные @A. Сулиман

p326 <- list(A=list(Branded.Generic = structure(list(Var1 = structure(1L, 
.Label = "B", class = "factor"),Var2 = structure(1L, .Label = "B",class = "factor"),
Freq = 100), class = "data.frame", row.names = c(NA, -1L)),
Branded.Generi = structure(list(Var1 = structure(1L, .Label = "B",class = "factor"),
Var2 = structure(1L, .Label = "B", class = "factor"), Freq = 100), 
class = "data.frame", row.names = c(NA,-1L))))

bind_rows(p326, .id = 'Col')

Ошибка: Аргумент 1 не может быть списком, содержащим фреймы данных

bind_rows(unlist(p326, recursive = FALSE), .id = 'Col')
#                Col Var1 Var2 Freq
#1 A.Branded.Generic    B    B  100
#2  A.Branded.Generi    B    B  100
2
Ronak Shah 2 Окт 2019 в 09:00