我有一组具有不同重复观察次数的个体数据集,有时只在最终观察中填充这些数据,例如:
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个)。最好的方法是什么?
答案 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