回填r中的数据

时间:2015-04-08 09:58:59

标签: r

我有一组具有不同重复观察次数的个体数据集,有时只在最终观察中填充这些数据,例如:

id <- c(1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3)
order <- c(1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4)
value <- c(NA, NA, NA, 3, NA, NA, NA, 6, NA, NA, NA, 1)
x <- data.frame(id, order, value)

如果ID代表每个人,则顺序是观察的顺序(1是第一个,后续观察增加1),值是需要回填的某个值(即我需要每个ID的NA&#39;如果缺少,请填写一个值。)

我被困在如何做到这一点。我尝试先订购数据:

x <- x[order(x$id, -x$order, x$value),]

但我无法通过选择之前的观察方式来了解如何使代码工作(即如果id =先前的id&amp; value缺失,则采用先前版本的值)。数据很大(13米记录),那里有许多不同的订单数量(大多数有1个观察,有些可能有多达10个)。最好的方法是什么?

1 个答案:

答案 0 :(得分:1)

您可以先选择只包含值的行:

x2 <- subset(x, x$value != "NA")

然后merge两个数据框用 x2 中为每个 ID 获取的值填充空插槽,请参阅 value.y 专栏:

merge(x, x2, by="id")

#   id order.x value.x order.y value.y
#1   1       1      NA       4       3
#2   1       2      NA       4       3
#3   1       3      NA       4       3
#4   1       4       3       4       3
#5   2       1      NA       4       6
#6   2       2      NA       4       6
#7   2       3      NA       4       6
#8   2       4       6       4       6
#9   3       1      NA       4       1
#10  3       2      NA       4       1
#11  3       3      NA       4       1
#12  3       4       1       4       1