Совпадение и объединение двух фреймов данных - PullRequest
0 голосов
/ 07 ноября 2018

Я хочу объединить и сопоставить следующие файлы CSV.

CSV 1

Year    Qrtrs   BD  BS  BY  All
1950    JAS     0   1   0   1
1950    OND     0   2   1   3
1951    JAS     1   0   4   5

CSV 2

Year    JFM AMJ JAS OND
1950    LN  LN  NN  LN
1951    LN  NN  EN  EN

И хотел бы получить фф.

Year    Qrtrs   CASE    BD  BS  BY  All
1950    JAS       NN    0   1   0   1
1950    OND       LN    0   2   1   3
1951    JAS       EN    1   0   4   5

Я новичок в R. Спасибо за вашу помощь.

А также я хочу добавить оставшиеся Qrtrs в окончательный CSV и просто поставить "0" в BD, BS, BY, ALL. Пожалуйста, смотрите ниже.

Year    Qrtrs   CASE    BD  BS  BY  All
1950    JAS       NN    0   1   0   1
1950    OND       LN    0   2   1   3
1950    AMJ       LN    0   0   0   0
1950    JFM       LN    0   0   0   0

Спасибо.!

1 Ответ

0 голосов
/ 07 ноября 2018

Данные

df1 <- read.table(
  text = "Year    Qrtrs   BD  BS  BY  All
          1950    JAS     0   1   0   1
          1950    OND     0   2   1   3
          1951    JAS     1   0   4   5",
  header = T, stringsAsFactors = F
)

df2 <- read.table(
  text = "Year    JFM AMJ JAS OND
          1950    LN  LN  NN  LN
          1951    LN  NN  EN  EN",
  header = T, stringsAsFactors = F
)

Я предоставляю метод с gather{tidyr} и left_join{dplyr}:

library(tidyr)
library(dplyr)

df2.2 <- gather(df2, key = "Qrtrs", value = "CASE", - Year)

df2.2

#   Year Qrtrs CASE
# 1 1950   JFM   LN
# 2 1951   JFM   LN
# 3 1950   AMJ   LN
# 4 1951   AMJ   NN
# 5 1950   JAS   NN
# 6 1951   JAS   EN
# 7 1950   OND   LN
# 8 1951   OND   EN

left_join(df1, df2.2)

#   Year Qrtrs BD BS BY All CASE
# 1 1950   JAS  0  1  0   1   NN
# 2 1950   OND  0  2  1   3   LN
# 3 1951   JAS  1  0  4   5   EN

Дополнительно, вот базовый способ:

df2.stack <- stack(df2, select = -Year)
df2.2 <- cbind(df2$Year, df2.stack)
names(df2.2) <- c("Year", "CASE", "Qrtrs")
merge(df1, df2.2, by = c("Year", "Qrtrs"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...