Объединение компонентов списка в r - PullRequest
0 голосов
/ 19 марта 2020

У меня есть список, который содержит данные по годам. Я хочу объединить эти компоненты в один фрейм данных, который соответствует строке. Пример списка:

    List [[1]]
    State Year   X   Y
    23     1971  etc  etc
    47     1971  etc  etc

    List[[2]]
    State Year   X   Y
    13     1972  etc etc
    23     1973  etc  etc
    47     1973  etc  etc

   etc....

   List[[45]]
     State Year   X   Y
     1     2017  etc etc
     2     2017 etc  etc
     3     2017 etc  etc
     1     2017  etc etc
    23     2017 etc  etc
    47     2017 etc  etc

Я хочу, чтобы кадр данных выглядел так (я знаю, что мне придется через go и удалить некоторые дополнительные столбцы:

    State   1971_X    1971_Y    1972_X    1972_Y....2018_X    2019_Y
    1         NA        NA       NA        NA         etc       etc
    2         NA        NA       etc       etc        etc       etc   
    3         etc       ect      etc       etc        etc       etc  
    ...
    50        NA        NA       etc        etc       etc       etc

Я попробовал команду Outcomewanted=do.call("cbind", examplelist) но получите сообщение

"Error in data.frame(..., check.names = FALSE) : 
  arguments imply differing number of rows: 36, 40, 20, 42, 38, 26, 17, 31, 35, 23, 33, 13, 29, 28, 32, 34, 41, 37, 43, 39, 30, 14, 10, 4, 7"

Кажется, что команда cbind.fill могла быть опцией, но была удалена? Спасибо за любую помощь заранее.

1 Ответ

1 голос
/ 19 марта 2020

Вы можете использовать reshape после do.call(rbind()) маневра.

res <- reshape(do.call(rbind, lst), idvar="state", timevar="year", direction="wide")
res
#   state     x.1971    y.1971    x.1972      y.1972     x.1973     y.1973
# 1    23  1.3709584 0.3631284        NA          NA -0.1061245  2.0184237
# 2    24 -0.5646982 0.6328626        NA          NA  1.5115220 -0.0627141
# 3    13         NA        NA 0.4042683 -0.09465904         NA         NA

Данные

lst <- list(structure(list(state = c(23, 24), year = c(1971, 1971), 
    x = c(1.37095844714667, -0.564698171396089), y = c(0.363128411337339, 
    0.63286260496104)), class = "data.frame", row.names = c(NA, 
-2L)), structure(list(state = c(13, 23, 24), year = c(1972, 1973, 
1973), x = c(0.404268323140999, -0.106124516091484, 1.51152199743894
), y = c(-0.0946590384130976, 2.01842371387704, -0.062714099052421
)), class = "data.frame", row.names = c(NA, -3L)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...