У меня есть три кадра данных. Один «основной» кадр данных, к которому я хочу объединить два других кадра данных.Заполнить NAs в dataframe с совпадением объёма данных в R
main = data.frame(a = LETTERS[1:5], b = round(rnorm(5),2))
a b
A 0.41
B -1.06
C -0.65
D -1.27
E 1.03
sub1 = data.frame(a = LETTERS[2:4], c = sample(c(100, 200, 300), 3, replace=T))
a c
B 200
C 200
D 200
sub2 = data.frame(a = LETTERS[c(1,5)], c = sample(c(999, 888), 2, replace=T))
a c
A 999
E 888
В первом слиянии, я хочу, чтобы объединить sub1
в main
через "a"
и это работает.
merged1 = merge(main, sub1, by="a", all.x=T)
a b c
A 0.41 NA
B -1.06 300
C -0.65 300
D -1.27 100
E 1.03 NA
Теперь я хочу присоединиться/слить sub2
к merged1
. В моем случае значения, указанные в sub2
, заменяют NA в столбце c. В частности, я хочу заменить эти НС значениями от sub2
. Я попытался это (и другие аргументы в пользу all.x
, all.y
:
merge(merged1, sub2, by="a", all.x=T)
a b c.x c.y
A 0.41 NA 999
B -1.06 300 NA
C -0.65 300 NA
D -1.27 100 NA
E 1.03 NA 999
Как я могу получить это только один столбец с с слияния
Не могли бы вы 1) использовать набор номера семян при создании этих data.frames так, что они воспроизводимы. 2) быть последовательным в соглашениях об именах ... вы создаете кадры данных «sub1» и «main», но затем используйте «df_main» и «df_sub1» в слиянии. 3) проверьте свой пример на точность. Похоже, что df_sub1 и sub1 отличаются друг от друга, поскольку последний содержит 300, но первый содержит только 200. – AOGSTA
Просто «rbind (df_sub1, df_sub2)» и сливайтесь с ним, а не отдельные небольшие слияния. Вам может потребоваться преобразовать столбцы факторов в символ, чтобы успешно «rbind». – Gregor
Я думаю, что единственным другим вариантом является пост-процесс с функцией [coalesce-like] (http://stackoverflow.com/q/19253820/903061). – Gregor