Объединить Dyad_Year с данными Country_Year - PullRequest
0 голосов
/ 14 февраля 2020

У меня есть два кадра данных, один год года, а другой год страны.

        Xccode1 ccode2 ccdistance            countryname_1       countryname_2 majorpower_1 
        majorpower_2   milex_1 milper_1
        1   1      2     20          0 United States of America              Canada            1            
         0 143981000     2050
        2   2      2     31        957 United States of America             Bahamas            1            
        0 143981000     2050
        3   3      2     40       1129 United States of America                Cuba            1            
        0 143981000     2050
        4   4      2     41       1437 United States of America               Haiti            1            

Страна-год:

   ccode1  year Fac1_A Fac2_A Fac3_A
   <int> <int>  <dbl>  <dbl>  <dbl>
    1      2  1980 -0.661   4.66   15.5
    2      2  1981 -0.661   4.66   15.5
    3      2  1982 -0.661   5.11   15.5
    4      2  1983 -0.661   5.21   15.5
    5      2  1984 -0.661   5.66   15.5
    6      2  1985 -0.661   5.21   15.5
    7      2  1986 -0.661   5.21   15.5
    8      2  1987 -0.661   5.21   15.5
    9      2  1988 -0.661   5.21   15.5
   10      2  1989 -0.661   5.00   15.5

Я хотел бы объединить эти два фрейма данных, чтобы каждая страна в диаде имела значение FacX, однако мои попытки сделать это либо дало мне ошибку, либо много АН. Сначала я попытался использовать простой ifelse:

    Demo_Dyad$Fac1_A_NR <- ifelse(Demo_Dyad$ccode1 == Cntry_yr$ccode1 &
                            Demo_Dyad$year == Cntry_yr$year,
                          Cntry_yr$Fac1_A, NA)

Однако в результате каждая страна в Dyad_Year имеет значение только один раз. Например, США <-> Гаити 1981 могут иметь значение X, но США <-> Куба 1981 будет NA.

Затем я попытался сделать это, сгруппировав в dplyr:

     Demo_Dyad %>%
     group_by(ccode1, year) %>%
     mutate(Fac1_A_NR <- ifelse(ccode1 == Cntry_yr$ccode1 &
                            year == Cntry_yr$year, Cntry_yr$Fac1_A, NA)) 

Но получите ошибку: Error in `$<-.data.frame`(`*tmp*`, Fac1_A_NR, value = c(-0.660552389122193, : replacement has 4942 rows, data has 217149

Если кто-нибудь увидит, что не так с моим кодом, я был бы очень признателен.

1 Ответ

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

Если вся задача состоит в объединении двух фреймов данных на основе общего столбца или столбцов, используйте merge. Например:

ДАННЫЕ :

set.seed(111)
df_a <- data.frame(
  Xccode = 1:10,
  v1a = rnorm(10),
  v2a = sample(LETTERS[1:5], 10, replace = T))

df_b <- data.frame(
  ccode = 1:10,
  v1b = rnorm(10, 5),
  v2b = sample(LETTERS[4:7], 10, replace = T))

РЕШЕНИЕ :

Предполагая, что столбец имеет два общих кадра данных равен Xccode и, соответственно, ccode вы можете использовать merge и указать два столбца как столбцы для объединения:

df_ab <- merge(df_a, df_b, by.x =  "Xccode", by.y = "ccode")
df_ab
   Xccode        v1a v2a      v1b v2b
1       1  0.2352207   B 3.806391   E
2       2 -0.3307359   A 5.364187   E
3       3 -0.3116238   C 5.361662   E
4       4 -2.3023457   A 5.346964   G
5       5 -0.1708760   C 5.189737   D
6       6  0.1402782   E 4.840423   D
7       7 -1.4974267   A 5.326549   F
8       8 -1.0101884   A 5.598254   D
9       9 -0.9484756   A 3.158466   F
10     10 -0.4939622   C 7.718056   G
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...