用r中的另一个df填充NA值

时间:2020-11-04 10:08:37

标签: r dataframe dplyr

你好,我有2个数据框

第一个

df1

target Name
SP1.1  Lupus
SP2.2  Canis
SP3.3  Canis

,第二个是我需要根据两个df之间的Namedf1$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

有人有主意吗?

2 个答案:

答案 0 :(得分:1)

您可以通过df1df2target连接起来,并使用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