#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
from1-4
, и просто поместилNA
его в четвертую строку.2. ну, bind_rows отлично справляется с разными именами, но он не справляется с 4-м NA