В R: Как объединить все фреймы данных с одинаковым именем? - PullRequest
0 голосов
/ 11 июня 2018

В настоящее время, используя for loop, я выплевываю несколько фреймов данных с именем

res_[Insert some date] 

Например, в моей среде у меня есть:

res_2018-04-01

res_2018-05-01

res_2018-06-01

Каждый из этих фреймов данных имеет 1 строку и 25 столбцов.Первый столбец - это дата загрузки файла (поэтому для первого кадра данных столбец будет иметь значение 2018-04-11), а последующие столбцы - за 24 месяца до даты загрузки файла.

После выполнения цикла for я хочу объединить все созданные фреймы данных, не вводя вручную имена этих фреймов данных.Так, например, я мог бы объединить все фреймы данных с именем вроде res_%

Таким образом, мой последний фрейм данных будет иметь 27 столбцов и (в данном случае) 3 строки.

Есть предложения?

РЕДАКТИРОВАТЬ: Вот вывод для dput (res_2018-04-11)

dput(`res_2018-04-11`)
structure(list(UploadDate = "2018-04-11", `2016-03-01` = 4822598.18735351, 
`2016-04-01` = 4022970.75519652, `2016-05-01` = 4471569.0873137, 
`2016-06-01` = 4762693.19167908, `2016-07-01` = 3799649.58966077, 
`2016-08-01` = 4667486.94228869, `2016-09-01` = 4748252.38636671, 
`2016-10-01` = 3953585.1499195, `2016-11-01` = 5258338.05699641, 
`2016-12-01` = 4529140.27998058, `2017-01-01` = 3334021.87730489, 
`2017-02-01` = 4842435.58785495, `2017-03-01` = 5430798.18389053, 
`2017-04-01` = 4045150.70691188, `2017-05-01` = 4660901.62683975, 
`2017-06-01` = 4684489.25953388, `2017-07-01` = 3680375.93521103, 
`2017-08-01` = 5231564.19023014, `2017-09-01` = 4073906.09821191, 
`2017-10-01` = 5440655.92109229, `2017-11-01` = 4996844.57817061, 
`2017-12-01` = 5087355.28846096, `2018-01-01` = 2895616.00464724, 
`2018-02-01` = 3766770.55063743), .Names = c("UploadDate", 
"2016-03-01", "2016-04-01", "2016-05-01", "2016-06-01", "2016-07-01", 
"2016-08-01", "2016-09-01", "2016-10-01", "2016-11-01", "2016-12-01", 
"2017-01-01", "2017-02-01", "2017-03-01", "2017-04-01", "2017-05-01", 
"2017-06-01", "2017-07-01", "2017-08-01", "2017-09-01", "2017-10-01", 
"2017-11-01", "2017-12-01", "2018-01-01", "2018-02-01"), row.names = c(NA, 
-1L), class = "data.frame")

1 Ответ

0 голосов
/ 11 июня 2018

Часто полезно привести минимальный рабочий пример в вашем вопросе.Вот пример одного.Здесь вместо 24 столбцов данных я использую только 3 столбца, но он показывает ту же точку:

`res_2018-04-11` <- structure(list(UploadDate = "2018-04-11", 
`2017-12-01` = 5087355.28846096, `2018-01-01` = 2895616.00464724, 
`2018-02-01` = 3766770.55063743), .Names = c("UploadDate", "2017-12-01", 
"2018-01-01", "2018-02-01"), row.names = c(NA, -1L), class = "data.frame")

`res_2018-03-09` <- structure(list(UploadDate = "2018-03-09", 
`2017-11-01` = 4996844.57817061, `2017-12-01` = 5087355.28846096, 
`2018-01-01` = 2895616.00464724), .Names = c("UploadDate", "2017-11-01", 
"2017-12-01", "2018-01-01"), row.names = c(NA, -1L), class = "data.frame")

`res_2018-02-12` <- structure(list(UploadDate = "2018-02-12", 
`2017-10-01` = 5440655.92109229, `2017-11-01` = 4996844.57817061, 
`2017-12-01` = 5087355.28846096), .Names = c("UploadDate", "2017-10-01", 
"2017-11-01", "2017-12-01"), row.names = c(NA, -1L), class = "data.frame")

Затем, как упомянуто в комментариях @Gregor, создайте список фреймов данных, указав pattern аргумент:

df_list <- mget(ls(pattern = "^res_.*"))

Теперь используйте rbind.fill из пакета plyr:

plyr::rbind.fill(df_list)
#   UploadDate 2017-10-01 2017-11-01 2017-12-01 2018-01-01 2018-02-01
# 1 2018-02-12    5440656    4996845    5087355         NA         NA
# 2 2018-03-09         NA    4996845    5087355    2895616         NA
# 3 2018-04-11         NA         NA    5087355    2895616    3766771
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...