R Изменить кадры данных до той же длины - PullRequest
0 голосов
/ 02 апреля 2020

У меня есть список, содержащий несколько фреймов данных с двумя столбцами (Год и область).
Проблема в том, что некоторые фреймы данных содержат информацию только за 2002–2015 или 2003–2017 годы, а другие - за 2001–2018 годы, и поэтому один , Поэтому они отличаются по длине.

list:

list(structure(list(Year= c(2001,2002,2004,2005), Area=c(1,2,3,4), class ="data.frame"), 
structure(list(Year= c(2001,2004,2018), Area=c(1,2,4), class ="data.frame", 
(list(Year= c(2008,2009,2014,2015,2016), Area=c(1,2,3,4,5), class ="data.frame"))

Как я могу изменить их все на одну и ту же длину (с 2001-2018), добавив NA или лучше 0 для области, если для этого года нет информации о области.

1 Ответ

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

Let

A = data.frame(Year= c(2001,2002,2004,2005), Area=c(1,2,3,4)) 
B = data.frame(Year= c(2001,2004,2018), Area=c(1,2,4)) 
C = list(A, B) 

Тогда у нас есть

Ref = data.frame(Year = 2001:2018)
New.List = lapply(C, function(x) dplyr::left_join(Ref, x))

с желаемым результатом

[[1]]
   Year Area
1  2001    1
2  2002    2
3  2003   NA
4  2004    3
5  2005    4
6  2006   NA
7  2007   NA
8  2008   NA
9  2009   NA
10 2010   NA
11 2011   NA
12 2012   NA
13 2013   NA
14 2014   NA
15 2015   NA
16 2016   NA
17 2017   NA
18 2018   NA

[[2]]
   Year Area
1  2001    1
2  2002   NA
3  2003   NA
4  2004    2
5  2005   NA
6  2006   NA
7  2007   NA
8  2008   NA
9  2009   NA
10 2010   NA
11 2011   NA
12 2012   NA
13 2013   NA
14 2014   NA
15 2015   NA
16 2016   NA
17 2017   NA
18 2018    4

Чтобы убедиться, что все data.frames в списке разделяют то же самое написание года, выполните

lapply(C, function(x) {colnames(x)[1] = "Year"; x})

при условии, что первый столбец всегда является столбцом года.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...