所以这个问题一直困扰着我,因为我一直在寻找一种有效的方法.基本上,我有一个数据框,每行都有一个实验数据样本.我想这应该被视为实验的日志文件,而不是分析数据的最终版本.
我遇到的问题是,有时会将某些事件记录在数据列中.为了使分析易于处理,我想要做的是为事件之间的空单元格"填补空白",以便数据中的每一行都可以绑定到最近发生的事件.这有点难以解释,但这是一个例子:

现在,我想把它变成这个:

这样做将使我能够通过当前事件分割数据.在任何其他语言中,我会跳转到使用for循环来执行此操作,但我知道R对于那种类型的循环并不是很好,并且在这种情况下,我有数十万行数据要进行排序,所以我想知道是否有人可以提供快速的方式来做这个建议?
非常感谢.
这个问题已多次在本网站上以各种形式提出.标准答案是使用zoo::na.locf.搜索[r] na.locf以查找如何使用它的示例.
以下是基本R使用的另一种方法rle:
d <- data.frame(LOG_MESSAGE=c('FIRST_EVENT', '', 'SECOND_EVENT', '', ''))
within(d, {
# ensure character data
LOG_MESSAGE <- as.character(LOG_MESSAGE)
CURRENT_EVENT <- with(rle(LOG_MESSAGE), # list with 'values' and 'lengths'
rep(replace(values,
nchar(values)==0,
values[nchar(values) != 0]),
lengths))
})
# LOG_MESSAGE CURRENT_EVENT
# 1 FIRST_EVENT FIRST_EVENT
# 2 FIRST_EVENT
# 3 SECOND_EVENT SECOND_EVENT
# 4 SECOND_EVENT
# 5 SECOND_EVENT
Run Code Online (Sandbox Code Playgroud)