用另一个不是 NA 的数据帧替换一个数据帧中的值

时间:2021-02-08 18:18:53

标签: r

我有两个数据框 A 和 B,它们共享具有相同的列名和相同的第一列(位置)

A <- data.frame("Location" = 1:3, "X" = c(21,15, 7), "Y" = c(41,5, 5), "Z" = c(12,103, 88))
B <- data.frame("Location" = 1:3, "X" = c(NA,NA, 14), "Y" = c(50,8, NA), "Z" = c(NA,14, 12))

如果 B 中的值不是 NA,我如何将数据帧 A 中的值替换为 B 中的值?

谢谢。

3 个答案:

答案 0 :(得分:1)

我们可以使用coalesce

library(dplyr)
A %>%
     mutate(across(-Location, ~ coalesce(B[[cur_column()]], .)))

-输出

#  Location  X  Y  Z
#1        1 21 50 12
#2        2 15  8 14
#3        3 14  5 12

答案 1 :(得分:1)

这是一个基于 R 的答案:

i <- which(!is.na(B),arr.ind = T)
A[i] <- B[i]

A
  Location  X  Y  Z
1        1 21 50 12
2        2 15  8 14
3        3 14  5 12

答案 2 :(得分:1)

fcoalesce 包中带有 data.table 的一个选项

list2DF(Map(data.table::fcoalesce,B,A))

给予

  Location  X  Y  Z
1        1 21 50 12
2        2 15  8 14
3        3 14  5 12