Проблемы с объединением и записью отфильтрованных данных - PullRequest
0 голосов
/ 18 апреля 2020

У меня есть некоторые отфильтрованные (с dplyr) данные, представленные ниже, из намного большего файла .csv. Я намерен использовать это в качестве моей независимости. переменная в модели линейной регрессии, также я хочу объединить эти столбцы и записать их в .csv (как я делюсь этим с моей командой.)

Я ранее сохранял эти данные в виде «списков» (из-за разница в длине каждой переменной) однако, когда я пишу в CSV, я должен преобразовать его в матрицу и данные очень не так, как ожидалось.

Проблема здесь в том, что каждый отфильтрованный набор имеет разную длину, и поэтому разные значения (CountPD) относятся к разным датам. Как я могу правильно объединить все эти данные в кадр данных (или что-то подобное), где я могу записать как CSV, а также применить линейную регрессию в будущем (ie, где имена столбцов являются «Дата», «y1», "y2" ... et c)

Y1:

structure(list(Date = structure(c(12083, 12111, 12142, 12172, 
12203, 17500, 17531, 17562, 17590, 17621, 17651), class = "Date"), 
    CountPD = c(1, 1, 1, NA, 1, NA, 0.083, NA, NA, 0.083, 0.083
    )), row.names = c(1L, 2L, 3L, 4L, 5L, 179L, 180L, 181L, 182L, 
183L, 184L), class = "data.frame")

Y2:

structure(list(Date = structure(c(17013, 17044, 17074, 17105, 
17135, NA), class = "Date"), CountPD = c(NA_real_, NA_real_, 
NA_real_, NA_real_, NA_real_, NA_real_)), row.names = c("1", 
"2", "3", "4", "5", "NA"), class = "data.frame")

Y3:

structure(list(Date = structure(c(12783, 12814, 12842, 12873, 
12903, 17500, 17531, 17562, 17590, 17621, 17651), class = "Date"), 
    CountPD = c(NA, 0.333, NA, NA, NA, NA, 0.125, 0.125, 0.222, 
    0.2, 0.25)), row.names = c(1L, 2L, 3L, 4L, 5L, 156L, 157L, 
158L, 159L, 160L, 161L), class = "data.frame")

Y4:

structure(list(Date = structure(c(12356, 12417, 12448, 12477, 
12508, 17500, 17531, 17562, 17590, 17621, 17651), class = "Date"), 
    CountPD = c(NA, NA, NA, NA, NA, 0.2, 0.2, 0.182, 0.182, 0.222, 
    0.25)), row.names = c(1L, 2L, 3L, 4L, 5L, 160L, 161L, 162L, 
163L, 164L, 165L), class = "data.frame")```


1 Ответ

0 голосов
/ 18 апреля 2020

Вот один подход, использующий tidyverse. Обратите внимание, что bind_rows включает Y1 = Y1, et c. так что назначения слева от = станут именами столбцов после pivot_wider, а имена справа - это фреймы данных, представленные в этом примере (также называемые Y1, Y2, Y3 и Y4). Выполняет ли это sh то, что вы намеревались?

library(tidyverse)

bind_rows(list(Y1 = Y1, Y2 = Y2, Y3 = Y3, Y4 = Y4), .id = 'Source') %>%
  pivot_wider(id_cols = Date, names_from = Source, values_from = CountPD)

Вывод

# A tibble: 27 x 5
   Date           Y1    Y2     Y3     Y4
   <date>      <dbl> <dbl>  <dbl>  <dbl>
 1 2003-01-31  1        NA NA     NA    
 2 2003-02-28  1        NA NA     NA    
 3 2003-03-31  1        NA NA     NA    
 4 2003-04-30 NA        NA NA     NA    
 5 2003-05-31  1        NA NA     NA    
 6 2017-11-30 NA        NA NA      0.2  
 7 2017-12-31  0.083    NA  0.125  0.2  
 8 2018-01-31 NA        NA  0.125  0.182
 9 2018-02-28 NA        NA  0.222  0.182
10 2018-03-31  0.083    NA  0.2    0.222
11 2018-04-30  0.083    NA  0.25   0.25 
...