我有2个(非常相似但不完全相同)的data.frames,我正在做几个任务(更多关于最后的那些)和一个子集。 data.frame有33个子集,我想要完成任务。我知道我可以用for循环来做到这一点:
df(1& 2)
subset value1 value2
1 1 1
1 2 5
2 3 2
2 2 4
........
33 234 21
33 2 5
subsets <- c(1:33)
for (i in subsets){
subset <- df[df$subset == i,]
...do tasks...
}
但是,我认为必须有更好的方法?也许有data.table,虽然这不是一个要求。关于从哪里开始的一些指导会有所帮助。
任务
我正在做的任务包括:
以下是上下文。如果我使用上面的forloop结构,下面的所有内容都可以正常工作,但我只是试图围绕如何为每个文件而不是整个df执行此操作,而不为每个文件执行for循环。
DF1
File Chromosome Min Max CN.State
C_28 1 1 100 1
C_28 1 150 200 1
A_1 1 20 25 3
A_1 1 150 200 3
df1 <- data.frame(File=c("C_28","C_28","A_1","A_1"),
+ Chromosome=rep(1, 4),
+ Min=c(1, 150, 20, 150),
+ Max=c(100, 200, 25, 200),
+ CN.State=c(1,1,3,3))
DF2
File Chromosome Min Max CN.State
C_28 1 1 210 1
A_1 1 15 250 3
df2 <- data.frame(File=c("C_28","A_1"),
+ Chromosome=rep(1, 2),
+ Min=c(1, 15),
+ Max=c(210, 250),
+ CN.State=c(1,3))
制作基因组范围对象
df1 <- makeGRangesFromDataFrame(df1, keep.extra.columns = TRUE, seqnames.field="Chromosome", start.field="Min", end.field = "Max")
df2 <- makeGRangesFromDataFrame(df2, keep.extra.columns = TRUE, seqnames.field = "Chromosome", start.field = "Min", end.field = "Max")
查找重叠&amp;结合
hits <- findOverlaps(df1, df2)
ranges(df1)[queryHits(hits)] <- ranges(df2)[subjectHits(hits)]