我有两个数据框 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 中的值?
谢谢。
答案 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