Добавьте уникальные имена из списка для создания столбцов в фрейме данных

#r #list #dataframe

Вопрос:

В настоящее время у меня есть приведенный ниже список, и я пытаюсь разработать структуру данных на основе результатов. По сути, я хотел бы взять первый список и добавить его в новый фрейм данных, создав столбцы с именами переменных и сохранив результаты в первой строке. Затем перейдите к следующему списку и создайте новый y столбец, чтобы в этот список были добавлены любые переменные с y результатами.

 list
[[1]]
       x       xy 
1.000365 1.000365 

[[2]]
       x        y 
1.007184 1.007184 

[[3]]
       x        y 
1.020803 1.020803

[[4]]
   NA
 

Возможно ли это сделать? Я пытался понять, как for loop lapply может работать или в этом сценарии, но не уверен.

Спасибо.

Ответ №1:

Вы можете использовать [ в lappy unique names одном из векторов:

 i <- unique(unlist(lapply(x, names)))
setNames(as.data.frame(do.call(rbind, lapply(x, `[`, i))), i)
#         x       xy        y
#1 1.000365 1.000365       NA
#2 1.007184       NA 1.007184
#3 1.020803       NA 1.020803
#4       NA       NA       NA
 

Данные:

 x <- list(c(x=1.000365, xy=1.000365), c(x=1.007184, y=1.007184),
          c(x=1.020803, y=1.020803), NA)
 

Ответ №2:

лапли, или даже лучше, bind_rows было бы хорошо для этого:

 
library(dplyr)
d <- bind_rows( your.list )

 

Обратите внимание, я предполагаю xy , что имя 2-го элемента первой записи списка является опечаткой?

Комментарии:

1. xy это имя другой переменной в списке. Таким образом, это будет новый столбец во фрейме данных. Я добавил еще один список NA , в который также включена запись. В идеале я бы создал фрейм данных, содержащий столбец n from 1-4 , и просто поместил NA его в четвертую строку.

2. ну, bind_rows отлично справляется с разными именами, но он не справляется с 4-м NA