R 代码编程:在堆叠排序表上先向下填充缺失列值,然后向上填充

2024-06-30

我有一个包含 3 列的数据框,但第三列有一些缺失值,需要用以下逻辑填充。

期望的结果是第三列(部分)上没有缺失值,要填充它,我们必须找到第一个“周”,其中为该特定“项目”(第一列)填充了“部分”值,并且然后通过向下复制“part”来填充它,直到找到“part”的新值。然后向下重复复制过程,直到找到新的“项目”行。

最后,对现在正在上升的每个“项目”重复填充过程,因为在第一个“周”填充“部分”之前可能存在一些空白。

这是示例数据框:

item=c(rep("A",7),rep("B",3),rep("D",5))
part=c("","","X","","Y","","","","Z","","","T","U","","")
week=c("1","2","3","4","5","6","7","1","2","3","10","11","12","13","14")
df=data.frame(item,week,part)

所需的结果数据框如下所示:

item2=c(rep("A",7),rep("B",3),rep("D",5))
part2=c("X","X","X","X","Y","Y","Y","Z","Z","Z","T","T","U","U","U")
week2=c("1","2","3","4","5","6","7","1","2","3","10","11","12","13","14")
df2=data.frame(item2,week2,part2)

非常感谢帮助,谢谢。


这本质上是“最后观察结转”任务

library(zoo)
levels(df$part)[1] <- NA

df$part <- with(df,
  ave(part, item, FUN=function(x) {
    x <- na.locf(x,na.rm=FALSE)
    x[is.na(x)] <- na.omit(x)[1]
    x
  })
)

#   item week part
#1     A    1    X
#2     A    2    X
#3     A    3    X
#4     A    4    X
#5     A    5    Y
#6     A    6    Y
#7     A    7    Y
#8     B    1    Z
#9     B    2    Z
#10    B    3    Z
#11    D   10    T
#12    D   11    T
#13    D   12    U
#14    D   13    U
#15    D   14    U

all.equal(df,df2, check.names=FALSE)
#[1] TRUE
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

R 代码编程:在堆叠排序表上先向下填充缺失列值,然后向上填充 的相关文章

随机推荐