你好,我有2个数据框
第一个
df1
target Name
SP1.1 Lupus
SP2.2 Canis
SP3.3 Canis
,第二个是我需要根据两个df之间的Name
和df1$Name
匹配项来填充df1$target
列中的NA值
df2
target Name COLn
SP1.1 <NA> 9
SP2.2 Canis 32
SP3.3 <NA> 78
SP4 Canis 7
预期结果将是
df2
target Name COLn
SP1.1 Lupus 9
SP2.2 Canis 32
SP3.3 Canis 78
SP4 Canis 7
有人有主意吗?
答案 0 :(得分:1)
您可以通过df1
将df2
和target
连接起来,并使用coalesce
作为Name
列的第一个非NA值。
library(dplyr)
df1 %>%
right_join(df2, by = 'target') %>%
mutate(Name = coalesce(Name.x, Name.y)) %>%
select(names(df2))
# target Name COLn
#1 SP1.1 Lupus 9
#2 SP2.2 Canis 32
#3 SP3.3 Canis 78
#4 SP4 Canis 7
在基数R中,您可以执行以下操作:
transform(merge(df1, df2, all.y = TRUE, by = 'target'),
Name = ifelse(is.na(Name.x), Name.y, Name.x))[names(df2)]
答案 1 :(得分:1)
如果target
唯一地标识行,则可以使用dplyr::rows_patch()
。
library(dplyr)
df2 %>%
rows_patch(df1, by = "target")
target Name COLn
1 SP1.1 Lupus 9
2 SP2.2 Canis 32
3 SP3.3 Canis 78
4 SP4 Canis 7