关于如何拆分数据帧有很多答案,例如,如何拆分数据帧?
但是,我想拆分一个数据框,以便较小的数据框包含上一个数据框的最后一行和下一个数据框的第一行。
这是一个例子
n <- 1:9
group <- rep(c("a","b","c"), each = 3)
data.frame(n = n, group)
n group
1 1 a
2 2 a
3 3 a
4 4 b
5 5 b
6 6 b
7 7 c
8 8 c
9 9 c
我希望输出看起来像:
d1 <- data.frame(n = 1:4, group = c(rep("a",3),"b"))
d2 <- data.frame(n = 3:7, group = c("a",rep("b",3),"c"))
d3 <- data.frame(n = 6:9, group = c("b",rep("c",3)))
d <- list(d1, d2, d3)
d
[[1]]
n group
1 1 a
2 2 a
3 3 a
4 4 b
[[2]]
n group
1 3 a
2 4 b
3 5 b
4 6 b
5 7 c
[[3]]
n group
1 6 b
2 7 c
3 8 c
4 9 c
什么是完成此任务的有效方法?
假设DF
是原始的data.frame,其中包含列n
和group
。让n
在的行数DF
。现在定义一个extract
给定索引序列的函数,ix
将其放大以包括第一个索引之前的索引和最后一个索引之后的索引,然后返回的那些行DF
。现在我们已经定义extract
了矢量1,...,n的分组,并将其应用于extract
拆分的每个分量。
n <- nrow(DF)
extract <- function(ix) DF[seq(max(1, min(ix) - 1), min(n, max(ix) + 1)), ]
lapply(split(seq_len(n), DF$group), extract)
$a
n group
1 1 a
2 2 a
3 3 a
4 4 b
$b
n group
3 3 a
4 4 b
5 5 b
6 6 b
7 7 c
$c
n group
6 6 b
7 7 c
8 8 c
9 9 c
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句