此问题与此帖Splitting a data frame into a list using intervals非常相似,但答案并不适用于我的数据,因为我没有包含二进制值的列。
我的数据如下:
>df
V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11
1 chr1 49828662 49828663 rs7531656 0 +|chr1 48998526 50489626 AGBL4 1 -
2 chr1 62594676 62594677 rs2481665 0 +|chr1 62208148 62629591 PATJ 1 +
3 chr1 62633580 62633581 rs2457831 0 +|chr1 62208148 62629591 PATJ 1 +
4 chr1 66379767 66379768 rs12757124 0 +|chr1 66378927 66840262 PDE4B 1 +
5 chr1 66392060 66392061 rs55824844 0 +|chr1 66378927 66840262 PDE4B 1 +
6 chr1 66393984 66393985 rs35185259 0 +|chr1 66378927 66840262 PDE4B 1 +
我需要的是根据列V2
拆分文件,并且在5e+05
的间隔内,输出将是这样的
[[1]]
1 chr1 49828662 49828663 rs7531656 0 +|chr1 48998526 50489626 AGBL4 1 -
[[2]]
2 chr1 62594676 62594677 rs2481665 0 +|chr1 62208148 62629591 PATJ 1 +
3 chr1 62633580 62633581 rs2457831 0 +|chr1 62208148 62629591 PATJ 1 +
[[3]]
4 chr1 66379767 66379768 rs12757124 0 +|chr1 66378927 66840262 PDE4B 1 +
5 chr1 66392060 66392061 rs55824844 0 +|chr1 66378927 66840262 PDE4B 1 +
6 chr1 66393984 66393985 rs35185259 0 +|chr1 66378927 66840262 PDE4B 1 +
我的数据有大约500万行,所以速度会有问题,但我可以稍后处理
答案 0 :(得分:3)
首先制作分裂点:
splits <- seq(0,5e6, 5e5)
这里有一些可能在你的V2列中的虚拟数据:
v2 <- runif(5e6, 0, 5e6)
现在在此列上调用cut来使用分割点创建一个因子:
f <- cut(v2, splits)
> table(f)
f (0,5e+05] (5e+05,1e+06] (1e+06,1.5e+06] (1.5e+06,2e+06] (2e+06,2.5e+06] (2.5e+06,3e+06] (3e+06,3.5e+06] (3.5e+06,4e+06] (4e+06,4.5e+06] (4.5e+06,5e+06]
499497 500111 499327 501262 499155 500263 500484 499776 500899 499226
最后在data.frame
上调用split并传递因子:
df.list <- split(mydf, f)
答案 1 :(得分:1)
我没有获得与@ Zelazny7相同的输出。以下是data.table
名为mydat
的方法。
library(data.table)
breaks = 5e+05*(floor(min(mydat$V2)/5e+05):ceiling(max(mydat$V2)/5e+05))
mydat$X<-mydat[,.(X = cut(V2, breaks = breaks))]
mylist<-split(mydat, mydat$X)
答案 2 :(得分:1)
也许你正在寻找这个:
split(df, cumsum(c(F, diff(df$V2) > 5e5)))
$`0`
V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11
1 chr1 49828662 49828663 rs7531656 0 +|chr1 48998526 50489626 AGBL4 1 -
$`1`
V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11
2 chr1 62594676 62594677 rs2481665 0 +|chr1 62208148 62629591 PATJ 1 +
3 chr1 62633580 62633581 rs2457831 0 +|chr1 62208148 62629591 PATJ 1 +
$`2`
V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11
4 chr1 66379767 66379768 rs12757124 0 +|chr1 66378927 66840262 PDE4B 1 +
5 chr1 66392060 66392061 rs55824844 0 +|chr1 66378927 66840262 PDE4B 1 +
6 chr1 66393984 66393985 rs35185259 0 +|chr1 66378927 66840262 PDE4B 1 +