根据一个特定值及其另一个变量的行索引创建分类变量条件

Creating an categorical variable conditioning on one specific value and its row indices of another variable

为了简单和可重复性,我在这里使用一个简单的数据框:

set.seed(1234)
df <- data.frame(v1 = sample(c("A", "B", "C", "D", "E", "F"), 100, 
                 replace = TRUE, prob = c(0.1,0.2,0.2,0.2,0.2,0.1)))

我的真实数据集包含从 pdf 文档中截取的几页。想象一下,“A”表示新页面开始。因此,例如,直到第一个“A”出现的行,所有数据都属于第一页。

通过使用以下代码,我可以轻松获取新页面开始的行索引:

page <- which(df$v1 == "A")

结果:在第 14 28 39 81 92 行中,我们观察到一个“A”。

为了能够按页对数据进行分组,我想创建一个指示页码的新变量。因此,我想为行索引 < 14 的所有行分配值 1,为索引在 14 到 27 之间的所有行分配值 2,为索引在 28 到 38 之间的所有行分配值 3,依此类推。

当然我的数据集比这个例子大得多,所以一个简单的 ifelse() 指定条件的解决方案效率不高。此外,我想要有通用代码,我可以将其应用于其他数据(从其他 pdf 中删除),这些数据将在不同位置具有“A”。

我已经在互联网上搜索了很多,但找不到与我的情况相似的内容。如果有人能帮助我,我将不胜感激,因为我不知道如何处理这种情况。

非常感谢!

您可以使用cumsum

df$page = cumsum(df$v1 == "A") + 1L