对于这个问题的含糊之处,我深表歉意,但是我对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
我该如何编程?
答案 0 :(得分:3)
您可以将split
与cumsum
结合使用以获取所需数据帧的列表。这基本上检查行是否不为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创建。