选择特定模式的行(R,Dataframe)

Selecting rows in a specific pattern (R, Dataframe)

我有一个(对于大多数人来说)容易回答且非常基本的问题 - 可能。

想象一下有一个包含 20 行的简单且普通的数据框(在此示例中,列无关紧要)。 有没有办法让我的所有行都遵循特定的选择模式 数字条款?例如:我想要前 3 行,跳过接下来的 5 行,然后在跳过的行之后得到以下 3 行 --> 选择 3 行后,跳过接下来的 5 行,依此类推,直到数据框结束到达。 --> 行及其特定列

基本上:RowsOfInterest、SkipThisAmountOfRows、RowsOfInterest、SkipThisAmountOfRows 例如:1:3、5、下一个 1:3(在跳过的 5 个之后)、5、1:3 等等。

将不胜感激 - 提前致谢!

您可以创建一个包含该模式的逻辑向量(例如 3 个 TRUE,然后 5 个 FALSE),然后在对它进行子集化时,该模式将根据 df 中的行数自动回收(重复),因为这是一个逻辑矢量.

df <- data.frame(rownum = 1:20, anothercol = letters[1:20])

df[rep(c(TRUE, FALSE), c(3, 5)),]
#    rownum anothercol
# 1       1          a
# 2       2          b
# 3       3          c
# 9       9          i
# 10     10          j
# 11     11          k
# 17     17          q
# 18     18          r
# 19     19          s

从模运算的角度来思考这个问题可能更容易。

您有一个每 8 行重复一次的模式,因此请考虑对 8 取模的行号:

df[seq_len(nrow(df)) %% 8L %in% 1:3, ]

seq_len(nrow(df)) 创建向量 1, 2, 3, ..., nrow(df).

data.table 中,这可能会稍微干净一些:

df[1:.N %% 8L %in% 1:3]

这也更清楚地表明存在一些操作顺序问题 -- %%%in% 哪个先出现?这是在 ?Syntax:

Within an expression operators of equal precedence are evaluated from left to right...