user3570605
user3570605

Reputation: 613

Select every nth row from dataframe

I have a data table and want to extract every fifth row from it to create a new table. Is there a command to achieve this?

Here is an sample of my data:

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

Upvotes: 51

Views: 96488

Answers (5)

Tamas
Tamas

Reputation: 121

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

Upvotes: 1

Quinten
Quinten

Reputation: 41245

Another option could be combining slice and seq like this:

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

Created on 2022-07-10 by the reprex package (v2.0.1)

Upvotes: 0

tmfmnk
tmfmnk

Reputation: 39858

One dplyr possibility for this task could be:

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

Or:

df %>%
 filter(row_number() %% 5 == 1)

Upvotes: 47

user14382
user14382

Reputation: 969

For a data frame df, you can get df.new as:

df.new = df[seq(1, nrow(df), 5), ]

This creates an index from row 1 to nrow (number of rows of the table) every 5 rows. You can play with the starting point and the 5 to extract other sequences.

Upvotes: 75

bartektartanus
bartektartanus

Reputation: 16080

If you want to extract 5,10...

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

If 1,6,11,

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

Upvotes: 12

Related Questions