R基于前一行的逐行输入填充
我有一个R数据框,看起来像这样:R基于前一行的逐行输入填充,r,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
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
... .... ...
并希望用最后一个数字替换空值。因此,对于
Cat1
而言,空值变为19,对于Cat2
而言,行空值变为25。我怎样才能做到这一点呢?也许你可以使用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也许您可以使用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您的“NULL”显然是一个字符,而不是特殊值,因此您可以将所有“NULL”转换为NAs,然后按照某人的建议使用tidyr::fill()
df您的“NULL”显然是一个字符,而不是特殊值,因此您可以将所有“NULL”转换为NAs,然后按照某人的建议使用tidyr::fill()
df将空值转换为NA
并遵循将空值转换为NA
并遵循