从数据框中选择每第n行

50

我有一个数据表,想要从中提取每五行以创建一个新的表格。是否有命令可以实现这一点?

这是我的数据示例:

count   Idf_Nr  block
1   1233    B12
2   1233    B12
3   1446    B12
4   1446    B12
5   365 B12
6   365 B12
7   876 B12
8   876 B12
9   842 B12
10  842 B12
11  1092    B12
12  1092    B12
13  923 B12
14  923 B12
15  1266    B12
16  1266    B12
17  256 B12
18  256 B12
19  588 B12
20  588 B12
21  1074    B12
22  1074    B12
23  474 B12
24  474 B12
25  1421    B12

3
考虑接受其中一个答案。 - zx8754
5个回答

74

对于数据框df,你可以使用以下代码获得df.new:

```R df.new <- df ```
df.new = df[seq(1, nrow(df), 5), ]

这将从第1行到第nrow(表格的行数)每5行创建一个索引。您可以尝试更改起始点和数字5以提取其他序列。


41

这个任务的 dplyr 解决方案可能是:

df %>%
 slice(which(row_number() %% 5 == 1))

  count Idf_Nr block
1     1   1233   B12
2     6    365   B12
3    11   1092   B12
4    16   1266   B12
5    21   1074   B12
或者:
df %>%
 filter(row_number() %% 5 == 1)

3
我非常喜欢这个解决方案的创新性和直觉性,以及使用 dplyr - r0berts

12

如果您想提取5、10...

newdf <- df[c(rep(FALSE,4),TRUE), ]

如果是1、6、11,

newdf <- df[c(TRUE,rep(FALSE,4)), ]

0

df<-df[c(seq(0,25,5)),]

其中 df 是您的数据框。


0

另一个选择可能是像这样结合 sliceseq

library(dplyr)
slice(df, seq(1, nrow(df), 5))
#>   count Idf_Nr block
#> 1     1   1233   B12
#> 2     6    365   B12
#> 3    11   1092   B12
#> 4    16   1266   B12
#> 5    21   1074   B12

reprex 包 (v2.0.1) 在 2022-07-10 创建


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接