Повторяющиеся строки при объединении неравных данных панели - PullRequest
0 голосов
/ 13 февраля 2020

Мне нужно объединить два набора панельных данных, которые имеют разный размер. Эти наборы данных имеют географическую привязку по столбцам координат. Единицы в одном из наборов данных являются ячейками сетки, которые вместе охватывают весь мир. Координаты этого набора данных относятся к центроиду ячеек сетки. Другой набор данных содержит данные о конфликтах, а также координаты их возникновения.

Однако, когда я пытаюсь объединить эти наборы данных по координатам, конфликтные события не размещаются правильно по годам, что все портит. Я полагаю, что я могу «исправить» это, создавая повторяющиеся строки, в которых имеется несколько конфликтных событий на год ячейки сетки, однако я понятия не имею, как это сделать.

Dataset1 (Grid-cell structure)
X       gid       row       col       xcoord       ycoord       imr_mean       year   
100      1         195      197       -81.75        7.25         200.00        1990 
101      2         195      197       -81.75        7.25         200.00        1992
102      3         195      197       -81.75        7.25         200.00        1991
103      4         195      197       -81.75        7.25         200.00        1993
104      5         195      197       -81.75        7.25         200.00        1994
105      6         195      197       -81.75        7.25         200.00        2000
106      7         195      197       -81.75        7.25         200.00        2001
107      8         195      197       -81.75        7.25         200.00        1998
108      9         195      197       -81.75        7.25         200.00        1999
109      10        195      197       -81.75        7.25         200.00        1996
110      11        195      197       -81.75        7.25         200.00        1995

Dataset 2 (Conflict events)
X       eventid       gwno       xcoord       ycoord       ndeath       year
32      400032         40         24.01       -81.84         41         1994 
300     410041         41         18.53       -72.33         5          1990
302     410043         41         19.66       -72.55         8          1990
308     410049         41         18.43       -72.86         13         1990
313     410054         41         18.53       -72.33         14         1990
323     410062         41         18.53       -72.33         7          1990
325     410064         41         18.97       -74.26         12         1991
326     410065         41         18.53       -72.33         13         1991
424     410151         41         18.53       -72.33         5          1993
471     410205         41         18.29       -73.82         30         1994

Буду признателен за любые предложения!

РЕДАКТИРОВАТЬ: Я пытался разные коды, я напишу несколько примеров.

test <- merge(ds1, ds2, by.x = "xcoord", by.y = "ycoord") 
test <- geo_join(ds1, ds2, by = c("xcoord", "ycoord"), max_dist = 27.5, unit = "km", mode = "full"
test <- geo_full_join(ds1, ds2, by = c(ds1$xcoord, ds2$xcoord), method = "haversine", unit = "km", max_dist = 27.5, distance_col = NULL) 

Кажется, что geo_joins правильно размещают события по координатам, но не по годам. Мой желаемый результат должен был правильно разместить события по году и области. Например, представьте, что одна из строк в ds1 - это Нью-Йорк. В 1991 году в ds2 произошло три события, которые размещены в ячейке NY C. Как и сейчас, только одно из этих событий будет объединено корректно, то есть как по координатам, так и по году. Другие будут смещены по годам, потому что существует только одно наблюдение за клеточным годом в год. Я хочу, чтобы каждое событие конфликта было отдельной строкой. Я полагаю, с моим по общему признанию ограниченным знанием, что это можно исправить, дублируя строки в DS1, где есть несколько событий в DS2, происходящих в одном и том же клеточном году, однако я действительно изо всех сил пытаюсь найти способ сделать это.

1 Ответ

0 голосов
/ 13 февраля 2020

Я не уверен в желаемом выводе, но ниже приведен пример использования merge для объединения двух фреймов данных

dfout <- merge(df1,df2,all = T)

, так что

> dfout
     X xcoord ycoord year gid row col imr_mean eventid gwno ndeath
1   32  24.01 -81.84 1994  NA  NA  NA       NA  400032   40     41
2  100 -81.75   7.25 1990   1 195 197      200      NA   NA     NA
3  101 -81.75   7.25 1992   2 195 197      200      NA   NA     NA
4  102 -81.75   7.25 1991   3 195 197      200      NA   NA     NA
5  103 -81.75   7.25 1993   4 195 197      200      NA   NA     NA
6  104 -81.75   7.25 1994   5 195 197      200      NA   NA     NA
7  105 -81.75   7.25 2000   6 195 197      200      NA   NA     NA
8  106 -81.75   7.25 2001   7 195 197      200      NA   NA     NA
9  107 -81.75   7.25 1998   8 195 197      200      NA   NA     NA
10 108 -81.75   7.25 1999   9 195 197      200      NA   NA     NA
11 109 -81.75   7.25 1996  10 195 197      200      NA   NA     NA
12 110 -81.75   7.25 1995  11 195 197      200      NA   NA     NA
13 300  18.53 -72.33 1990  NA  NA  NA       NA  410041   41      5
14 302  19.66 -72.55 1990  NA  NA  NA       NA  410043   41      8
15 308  18.43 -72.86 1990  NA  NA  NA       NA  410049   41     13
16 313  18.53 -72.33 1990  NA  NA  NA       NA  410054   41     14
17 323  18.53 -72.33 1990  NA  NA  NA       NA  410062   41      7
18 325  18.97 -74.26 1991  NA  NA  NA       NA  410064   41     12
19 326  18.53 -72.33 1991  NA  NA  NA       NA  410065   41     13
20 424  18.53 -72.33 1993  NA  NA  NA       NA  410151   41      5
21 471  18.29 -73.82 1994  NA  NA  NA       NA  410205   41     30
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...