Я пытаюсь объединить два фрейма данных, используя dplyr
left_join
. Код приведен ниже:
file = c('f1', 'f2', 'f3', 'f4', 'f5', 'f6', 'f7', 'f8', 'f9', 'f10', 'f11', 'f12', 'f13', 'f14', 'f15')
word_count = c(14806, 804, 168, 27172, 782, 699, 1891, 64385, 738, 9497, 74, 181183, 173, 37, 2321)
wc_df <- cbind.data.frame(file, word_count)
variant = c('bcause', 'bcos', 'bcos', 'bcos', 'bcos', 'bcos', 'bcos', 'bcos', 'bcos', 'bcos', 'bcus', 'bcus', 'bcus', 'because', 'because', 'because', 'because', 'because', 'because', 'because', 'because', 'because', 'because', 'becos', 'becos', 'becos', 'becos', 'becos', 'becos', 'becos', 'becos', 'becos', 'bicos', 'cos', 'cos', 'cos', 'cos', 'cos', 'cos', 'cos', 'cos', 'cos', 'cus', 'cus', 'cus', 'cus', 'cus', 'cuz', 'cuz', 'cuz', 'cuz', 'cuz', 'cuz', 'cz')
file = c('f1', 'f1', 'f2', 'f3', 'f4', 'f5', 'f6', 'f7', 'f8', 'f9', 'f10', 'f11', 'f12', 'f1', 'f2', 'f3', 'f4', 'f5', 'f6', 'f7', 'f8', 'f9', 'f10', 'f1', 'f2', 'f3', 'f4', 'f5', 'f6', 'f7', 'f8', 'f9', 'f10', 'f1', 'f2', 'f3', 'f4', 'f5', 'f6', 'f7', 'f8', 'f9', 'f1', 'f2', 'f3', 'f4', 'f5', 'f6', 'f7', 'f8', 'f9', 'f10', 'f11', 'f12')
freq = c(2, 14, 3, 1, 3, 11, 14, 5, 19, 4, 2, 1, 1, 23, 2, 51, 1, 1, 4, 52, 2, 29, 4, 7, 3, 1, 112, 12, 7, 7, 2, 8, 646, 15, 1, 1, 7, 9, 1, 13, 14, 11, 1, 6, 1, 4, 2, 4, 5, 2, 3, 1, 3, 1)
freq_df <- cbind.data.frame(file, variant, freq)
new_df <- left_join(freq_df, wc_df)
Как видно, столбец file
используется для объединения двух фреймов данных. Проблема в том, что freq_df
всегда будет иметь несколько значений (или уровней), отсутствующих для file
. Таким образом, можно заметить, что wc_df
имеет 15 уровней file
, но freq_df
имеет только 12 из них. Когда я присоединяюсь к этим двум, используя вышеупомянутую функцию dplyr
, значения / уровни file
, которые недоступны в первом кадре данных, теряются. После поиска я наткнулся на функцию complete()
из tidyr
. Я могу применить его следующим образом, чтобы получить отсутствующие комбинации существующих file
и variant
(12 * 10 = 120 строк) следующим образом:
new_df <- left_join(freq_df, wc_df) %>% tidyr::complete(file, variant, fill = list(freq = 0))
Однако я хочу получить отсутствующие значения /уровни file
(от wc_df
также) в new_df
, где комбинации variant
и file
будут иметь NA (или 0) в третьем столбце freq
(и общее числорядов будет 15 * 10 = 150). Как я могу это сделать?