Слияние наборов данных различной длины по годам в R - PullRequest
3 голосов
/ 28 января 2011

У меня есть очень простой вопрос о слиянии двух наборов данных неравной длины. Одним из них является стандартная панель

ID Time 
 1   1    
 1   2  
 1   3  
 2   1  
 2   2  
 2   3  

Второй набор имеет неодинаковую длину и выглядит следующим образом

ID  Time X
 1   2   2
 2   1   3
 2   3   4

Как я могу объединить эти два по идентификатору и времени, чтобы

ID Time  X 
 1   1   NA 
 1   2   2
 1   3   NA
 2   1   3
 2   2   NA
 2   3   4

1 Ответ

10 голосов
/ 28 января 2011

Привет, может быть, вам стоит взглянуть на опции all.x или all.y в ​​функции слияния.

Data1 <- data.frame(ID = rep(c(1,2), each = 3),
                    Time = rep(c(1, 2, 3), 2))
Data2 <- data.frame(ID = c(1, 2, 2),
                    Time = c(2, 1, 3),
                    X = c(2, 3, 4))
merge(Data2, Data1, all.y = TRUE)
  ID Time  X
1  1    1 NA
2  1    2  2
3  1    3 NA
4  2    1  3
5  2    2 NA
6  2    3  4

или с помощью функции plyr join, которая быстрее, чем merge, но не имеет некоторых опций:

join(Data2, Data1, type = "full")
Joining by: ID, Time
  ID Time  X
1  1    2  2
2  2    1  3
3  2    3  4
4  1    1 NA
5  1    3 NA
6  2    2 NA
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...