【发布时间】:2014-09-23 08:51:09
【问题描述】:
我有两个数据集 x 和 y
> x
a index b
1 1 1 5
2 NA 2 6
3 2 3 NA
4 NA 4 9
> y
index a
1 2 100
2 4 101
>
我想用 y 中包含的值填充 x 的缺失值。
我尝试使用合并功能,但结果不是我想要的。
> merge(x,y, by = 'index', all=T)
index a.x b a.y
1 1 1 5 NA
2 2 NA 6 100
3 3 2 7 NA
4 4 NA 9 101
在实际问题中还有其他限制: 1 - y 不填充所有缺失值 2 - x 和 y 有更多的共同变量(所以不仅仅是 a 和索引)
编辑:更现实的例子
> x
a index b c
1 1 1 5 NA
2 NA 2 6 NA
3 2 3 NA 5
4 NA 4 9 NA
5 NA 5 10 6
> y
index a c
1 2 100 4
2 4 101 NA
>
该解决方案将在 python 或 R 中都被接受
【问题讨论】:
-
可以做类似
x$a[is.na(x$a)] <- y[na.omit(match(x$index, y$index)), "a"]的事情 -
x$a[is.na(x$a)] <- y$a[y$index %in% x$index]适用于您的示例。但是您的“其他限制”并不完全清楚。请提供一个足够复杂的最小可重现示例 - 不多也不少。 -
@Henrik,如果
x中的索引顺序不同(例如x$index <- c(1,4,3,2))会给出错误的结果 -
我已经包含了一个更接近原始问题的示例
-
@DavidArenburg,好点子!感谢您指出这一点。