【发布时间】:2019-07-12 05:53:41
【问题描述】:
我有数据,其简化版本如下所示:
df_current <- data.frame(
start = c('yes', rep('no', 5), 'yes', rep('no', 3)),
season = c('banana', rep('to update', 5), 'apple', rep('to update', 3)),
stringsAsFactors = F
)
假设“开始”变量表示新季节的开始时间,我可以将它与日期变量(不包括在内)结合使用来表示苹果和香蕉季节的开始时间。完成此操作后,我想更新“季节”列中的其余行。当前具有“要更新”值的所有行都应更新为具有最近开始季节的水果类型的值(行按日期排列)。换句话说,我希望数据看起来像这样:
df_desired <- data.frame(
start = c('yes', rep('no', 5), 'yes', rep('no', 3)),
season = c(rep('banana', 6), rep('apple', 4)),
stringsAsFactors = F
)
我曾认为类似以下的方法会起作用:
updated <- df_current %>%
rowwise() %>%
mutate(season = case_when(
season != 'to update' ~ season,
season == 'to update' ~ lag(season)
))
但是,这会在所有“更新”值处生成 NA。
【问题讨论】: