选择特定模式的行(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...
我有一个(对于大多数人来说)容易回答且非常基本的问题 - 可能。
想象一下有一个包含 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...