Как преобразовать определенные элементы из длинного списка во фрейм данных в R? - PullRequest
1 голос
/ 30 апреля 2020

У меня есть список длиной 4500 элементов. Каждый список имеет длину 7. Можно ли будет извлечь определенные элементы из каждого списка и преобразовать их во фрейм данных. Ниже приведен пример

List1 <- list(Name = "Peter" , Age = 25 , State = "Texas" , Occupation = "Analyst1" , Salary =5000)

List2 <- list(Name = "Susan" , Age = 30 , State = "New York" , Occupation = "Analyst11" , Salary =7000)

List3 <- list(Name = "John" , Age = 35 , State = "New Jersey" , Occupation = "Manager" , Salary =10000)
List4 <- list(Name = "Sam" , Age = 30 , State = "Florida" , Occupation = "Analyst1" , Salary =5000)
List5 <- list(Name = "Judy" , Age = 30 , State = "California" , Occupation = "Analyst11" , Salary =7000)
FinalList <- list(List1 , List2, List3 , List4 , List5)

Я хотел бы создать фрейм данных со столбцами Имя, Возраст и Зарплата. Я попытался использовать do.call как

 FinalResult <- do.call(rbind ,FinalList[][-c(3,4)] )

, который создает фрейм данных, как показано ниже:

 #     name    Age State        Occupation  Salary
 #[1,] "Peter" 25  "Texas"      "Analyst1"  5000  
 #[2,] "Sam"   30  "Florida"    "Analyst1"  5000  
 #[3,] "Judy"  30  "California" "Analyst11" 7000  

Но я хотел бы создать

 #         name    Age   Salary
 #[1,]    "Peter"  25    5000  
 #[2,]    "Susan"  30    7000  
 #[3,]    "John"   35    10000 
 #[4,]    "Sam"    30    5000  
 #[5,]    "Judy"   30    7000  

Кто-нибудь может мне с этим помочь? Спасибо.

Ответы [ 2 ]

1 голос
/ 30 апреля 2020

Мы можем использовать unnest_wider

library(purrr)
library(tidyr)
tibble(col = FinalList) %>%
    unnest_wider(c(col)) %>%
    dplyr::select(-c(3:4))
0 голосов
/ 30 апреля 2020

Я думаю, что вы пытались сделать:

do.call(rbind ,FinalList)[, -c(3, 4)]
#If needed as dataframe
#do.call(rbind.data.frame,FinalList)[, -c(3, 4)]

Или, возможно, проще, используя dplyr

library(dplyr)
bind_rows(FinalList) %>% select(-(3:4))

и data.table

library(data.table)
rbindlist(FinalList)[, -c(3, 4)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...