У меня есть два фрейма данных, которые я пытаюсь объединить.
«данные» выглядят так:
Filled_Ticker2LP publishYear CO_1_Name
1: SONC 2005 sonic corp
2: SONC 2005 sonic corp
3: <NA> 2005 cascade bancorp inc.
4: JCP 2005 jc penney company inc
«комп» выглядит так:
tic fyear conm
<chr> <int> <chr>
1 JCP 2004 penney (j c) co
2 JCP 2005 penney (j c) co
3 JCP 2006 penney (j c) co
4 JCP 2007 penney (j c) co
5 JCP 2008 penney (j c) co
Я хочу объединить эти два набора данных, используя left_join
(или что-то из пакета data.table
et c.)
В настоящее время я могу присоединиться к нему на основе года и символа, такого как SONC
, JCP
.
mergedData <- data %>%
left_join(comp, by = c("Filled_Ticker2LP" = "tic", "publishYear" = "fyear"))
"mergedData" выглядит следующим образом:
Filled_Ticker2LP publishYear CO_1_Name conm
1: SONC 2005 sonic corp sonic corp
2: SONC 2005 sonic corp sonic corp
3: <NA> 2005 cascade bancorp inc. <NA>
4: JCP 2005 jc penney company inc penney (j c) co
, который хорошо работает, но имеет столбец NA
в столбце Filled_Ticker2LP
(который исходит от data
набор данных.
Я хотел бы попытаться объединить данные, используя текущий метод, который у меня есть, но если в столбце Filled_Ticker2LP
есть значение NA
, я бы хотел изменить «совпадающая ссылка» от присоединения к tic
и Filled_Ticker2LP
к сопоставлению по названию компании. conm
или CO_1_Name
.
То есть данные в настоящее время не могут присоединиться, поскольку в данных data
установите под столбцом Filled_Ticker2LP
для наблюдения 3
, оно имеет значение NA
. Однако это наблюдение все еще может быть объединено с данными comp
, так как в c olumn data$CO_1_Name
наблюдения 3 имеет cascade Bancorp
. Этот результат также появляется в comp
данных наблюдений 30 - 53 под столбцом conm
.
Я думал о if
утверждении, что:
если нет NA в данных $ Filled_Ticker2LP затем соединяется с использованием Filled_Ticker2LP и ti c, а затем соединяется с использованием CO_1_Name и conm.
Дополнительно
Я также заметил, что в столбцах есть некоторые пробелы.
data %>%
mutate(
CO_1_Name = str_trim(CO_1_Name)
)
Данные 1:
comp <- structure(list(tic = c("JCP", "JCP", "JCP", "JCP", "JCP", "JCP",
"JCP", "JCP", "JCP", "JCP", "JCP", "JCP", "JCP", "JCP", "JCP",
"SONC", "SONC", "SONC", "SONC", "SONC", "SONC", "SONC", "SONC",
"SONC", "SONC", "SONC", "SONC", "SONC", "SONC", "CACB", "CACB",
"CACB", "CACB", "CACB", "CACB", "CACB", "CACB", "CACB", "CACB",
"CACB", "CACB", "CACB", "CACB", "CACB", "CACB", "CACB", "CACB",
"CACB", "CACB", "CACB", "CACB", "CACB", "CACB"), fyear = c(2004L,
2005L, 2006L, 2007L, 2008L, 2009L, 2010L, 2011L, 2012L, 2013L,
2014L, 2015L, 2016L, 2017L, 2018L, 2005L, 2006L, 2007L, 2008L,
2009L, 2010L, 2011L, 2012L, 2013L, 2014L, 2015L, 2016L, 2017L,
2018L, 2005L, 2005L, 2006L, 2006L, 2007L, 2007L, 2008L, 2008L,
2009L, 2009L, 2010L, 2010L, 2011L, 2011L, 2012L, 2012L, 2013L,
2013L, 2014L, 2014L, 2015L, 2015L, 2016L, 2016L), conm = c("penney (j c) co",
"penney (j c) co", "penney (j c) co", "penney (j c) co", "penney (j c) co",
"penney (j c) co", "penney (j c) co", "penney (j c) co", "penney (j c) co",
"penney (j c) co", "penney (j c) co", "penney (j c) co", "penney (j c) co",
"penney (j c) co", "penney (j c) co", "sonic corp", "sonic corp",
"sonic corp", "sonic corp", "sonic corp", "sonic corp", "sonic corp",
"sonic corp", "sonic corp", "sonic corp", "sonic corp", "sonic corp",
"sonic corp", "sonic corp", "cascade bancorp", "cascade bancorp",
"cascade bancorp", "cascade bancorp", "cascade bancorp", "cascade bancorp",
"cascade bancorp", "cascade bancorp", "cascade bancorp", "cascade bancorp",
"cascade bancorp", "cascade bancorp", "cascade bancorp", "cascade bancorp",
"cascade bancorp", "cascade bancorp", "cascade bancorp", "cascade bancorp",
"cascade bancorp", "cascade bancorp", "cascade bancorp", "cascade bancorp",
"cascade bancorp", "cascade bancorp")), row.names = c(NA, -53L
), class = c("tbl_df", "tbl", "data.frame"))
Данные 2:
data <- structure(list(Filled_Ticker2LP = c("SONC", "SONC", NA, "JCP",
"JCP", "JCP", "SONC", "SONC", "JCP", "JCP", "JCP", "JCP", "SONC",
"JCP", "JCP", "JCP", "SONC", "JCP", "JCP", "SONC", "JCP", "JCP",
"JCP", "JCP", "JCP", "JCP", "JCP", "JCP", "JCP", "JCP", "JCP",
"JCP", "JCP", "JCP", "JCP", "SONC"), publishYear = c(2005L, 2005L,
2005L, 2005L, 2005L, 2006L, 2006L, 2006L, 2006L, 2006L, 2006L,
2006L, 2007L, 2007L, 2007L, 2007L, 2007L, 2008L, 2008L, 2008L,
2009L, 2009L, 2010L, 2010L, 2010L, 2010L, 2011L, 2011L, 2011L,
2011L, 2011L, 2012L, 2013L, 2015L, 2015L, 2016L), CO_1_Name = c(" sonic corp",
" sonic corp", " cascade bancorp inc.", " jc penney company inc",
" jc penney company inc", " jc penney company inc", " sonic corp",
" sonic corp", " jc penney company inc", " jc penney company inc",
" jc penney company inc", " jc penney company inc", " sonic corp",
" jc penney company inc", " jc penney company inc", " jc penney company inc",
" sonic corp", " jc penney company inc", " jc penney company inc",
" sonic corp", " jc penney company inc", " jc penney company inc",
" jc penney company inc", " macy's incorporated", " macy's incorporated",
" jc penney company inc", " macy's incorporated", " macy's incorporated",
" jc penney company inc", " apple inc", " apple inc", " macy's incorporated",
" jc penney company inc", " jc penney company inc", " jc penney company inc",
" sonic corp")), .internal.selfref = <pointer: 0x55603dbefe00>, row.names = c(NA,
-36L), class = c("data.table", "data.frame"))