首页 > 解决方案 > R 基于前一行的逐行条目填充

问题描述

我有一个看起来像这样的 R 数据框:

Category Date        Column
Cat1     2018-03-23  19
Cat1     2018-03-24  19
Cat1     2018-03-25  19
Cat1     2018-03-26  NULL
Cat1     2018-03-27  NULL
...      ....        ...
Cat2     2018-03-23  25
Cat2     2018-03-24  25
Cat2     2018-03-25  25
Cat2     2018-03-26  NULL
Cat2     2018-03-27  NULL
...      ....        ...

并想用最后一个数字替换 NULL 值。因此,Cat1对于 NULL 变为 19,对于Cat2行 NULL 变为 25。我该如何实现呢?

标签: r

解决方案


也许您可以尝试下面的基本 R 代码,使用ave

df <- within(df, Column <- ave(Column, Category, FUN = function(x) ifelse(x=="NULL",tail(x[x!="NULL"],1),x)))

# > df
# Category       Date Column
# 1      Cat1 2018-03-23     19
# 2      Cat1 2018-03-24     19
# 3      Cat1 2018-03-25     19
# 4      Cat1 2018-03-26     19
# 5      Cat1 2018-03-27     19
# 6      Cat2 2018-03-23     25
# 7      Cat2 2018-03-24     25
# 8      Cat2 2018-03-25     25
# 9      Cat2 2018-03-26     25
# 10     Cat2 2018-03-27     25

数据

df <- structure(list(Category = c("Cat1", "Cat1", "Cat1", "Cat1", "Cat1", 
"Cat2", "Cat2", "Cat2", "Cat2", "Cat2"), Date = c("2018-03-23", 
"2018-03-24", "2018-03-25", "2018-03-26", "2018-03-27", "2018-03-23", 
"2018-03-24", "2018-03-25", "2018-03-26", "2018-03-27"), Column = c("19", 
"19", "19", "19", "19", "25", "25", "25", "25", "25")), row.names = c(NA, 
-10L), class = "data.frame")

推荐阅读