R - Merge/Join 并且只有在丢失时才替换(优先级?)
R - Merge/Join and only replace if missing (Priority?)
是否可以只合并缺失值的数据?
例如,假设我有两个数据集。 D1 是我的优先数据集,但我想使用 D2 中的信息来填充 D1 中的任何缺失数据。如果D1和D2有冲突的值,那么我想保留D1中的值并丢弃D2。
D1 <- data.frame(
id=seq(1,3),
x=c("cow",NA,"sheep"))
D2 <- data.frame(
id=seq(1,3),
x=c("cow","turtle","parrot"))
理想情况下,最终数据集如下所示:
D3 <- data.frame(
id=seq(1,3),
x=c("cow","turtle","sheep"))
turtle
会替换 NA
,但 parrot
不会替换 sheep
.
如果行是唯一标识的,您可以使用 dplyr::rows_patch()
.
library(dplyr)
D1 %>%
rows_patch(D2, by = "id")
id x
1 1 cow
2 2 turtle
3 3 sheep
在基础 R 中,您可以使用 match
-
inds <- is.na(D1$x)
D1$x[inds] <- D2$x[match(D1$id[inds], D2$id)]
D1
# id x
#1 1 cow
#2 2 turtle
#3 3 sheep
是否可以只合并缺失值的数据?
例如,假设我有两个数据集。 D1 是我的优先数据集,但我想使用 D2 中的信息来填充 D1 中的任何缺失数据。如果D1和D2有冲突的值,那么我想保留D1中的值并丢弃D2。
D1 <- data.frame(
id=seq(1,3),
x=c("cow",NA,"sheep"))
D2 <- data.frame(
id=seq(1,3),
x=c("cow","turtle","parrot"))
理想情况下,最终数据集如下所示:
D3 <- data.frame(
id=seq(1,3),
x=c("cow","turtle","sheep"))
turtle
会替换 NA
,但 parrot
不会替换 sheep
.
如果行是唯一标识的,您可以使用 dplyr::rows_patch()
.
library(dplyr)
D1 %>%
rows_patch(D2, by = "id")
id x
1 1 cow
2 2 turtle
3 3 sheep
在基础 R 中,您可以使用 match
-
inds <- is.na(D1$x)
D1$x[inds] <- D2$x[match(D1$id[inds], D2$id)]
D1
# id x
#1 1 cow
#2 2 turtle
#3 3 sheep