如何将一个数据帧分成多个数据,按行过滤?

时间:2018-07-20 19:05:42

标签: r dataframe

对于这个问题的含糊之处,我深表歉意,但是我对R还是陌生的,因此我对所有适当的术语还不满意。本质上,我有以下数据:

Mydata <- data.frame(attr = c(1,2,3,4,5,6,7,8,9,10),
type = c(1,3,1,1,1,5,1,1,8,1))

说我想创建多个不同的数据帧,当type不等于一个时,每个数据帧都被分隔开。我想要的输出如下:

   attr type
1    1    1

   attr type
1    2    3
2    3    1
3    4    1
4    5    1

   attr type
1    6    5
2    7    1
3    8    1

   attr type
1    9    8
2   10    1

我该如何编程?

1 个答案:

答案 0 :(得分:3)

您可以将splitcumsum结合使用以获取所需数据帧的列表。这基本上检查行是否不为1,生成组索引,然后使用split获得正确的输出。如果数据帧列表实际上不是您想要的,而是分组计算,则考虑使用dplyr::group_by而不是split

Mydata <- data.frame(
  attr = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10),
  type = c(1, 3, 1, 1, 1, 5, 1, 1, 8, 1)
)
split(Mydata, cumsum(Mydata$type != 1))
#> $`0`
#>   attr type
#> 1    1    1
#> 
#> $`1`
#>   attr type
#> 2    2    3
#> 3    3    1
#> 4    4    1
#> 5    5    1
#> 
#> $`2`
#>   attr type
#> 6    6    5
#> 7    7    1
#> 8    8    1
#> 
#> $`3`
#>    attr type
#> 9     9    8
#> 10   10    1

reprex package(v0.2.0)于2018-07-20创建。