如何使用数据集的特定行顺序?

时间:2019-06-03 13:06:18

标签: r

假设我有以下数据集

1 2 3 4
4 5 6 7
2 3 4 6
3 4 5 6 
9 4 8 6 
4 4 5 6
3 2 1 5
4 3 2 1
9 9 8 8
.
.
.

现在我要使用这些行:

   1 2 3 4
   9 4 8 6
   9 9 8 8
    .
    .
    .

换句话说,我排第一行,然后错过三排,第四排又错过了三排,第七排,然后...

4 个答案:

答案 0 :(得分:3)

我们可以使用:

df[seq(1,nrow(df),4),]
  V1 V2 V3 V4
1  1  2  3  4
5  9  4  8  6
9  9  9  8  8

数据:

df<-structure(list(V1 = c(1L, 4L, 2L, 3L, 9L, 4L, 3L, 4L, 9L), V2 = c(2L, 
5L, 3L, 4L, 4L, 4L, 2L, 3L, 9L), V3 = c(3L, 6L, 4L, 5L, 8L, 5L, 
1L, 2L, 8L), V4 = c(4L, 7L, 6L, 6L, 6L, 6L, 5L, 1L, 8L)), class = "data.frame", row.names = c(NA, 
-9L))

答案 1 :(得分:1)

我们可以创建一个自定义分组变量,并获取每个组的第一个条目。 tidyverse中的解决方案是

library(dplyr)

df %>% 
 group_by(grp = c(0, rep(1:(n() - 1) %/% 4))) %>% 
 slice(1L)

给出,

# A tibble: 3 x 5
# Groups:   grp [3]
     V1    V2    V3    V4   grp
  <int> <int> <int> <int> <dbl>
1     1     2     3     4     0
2     9     4     8     6     1
3     9     9     8     8     2

答案 2 :(得分:1)

另一个解决方案是

df[1:nrow(df) %% 4 == 1, ]
  V1 V2 V3 V4
1  1  2  3  4
5  9  4  8  6
9  9  9  8  8

答案 3 :(得分:1)

另一种dplyr可能性是:

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

  V1 V2 V3 V4
1  1  2  3  4
2  9  4  8  6
3  9  9  8  8