R - 在data.frame中按组执行一系列任务

时间:2016-08-26 17:35:26

标签: r data.table bioconductor

我有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,虽然这不是一个要求。关于从哪里开始的一些指导会有所帮助。

任务

我正在做的任务包括:

  • 创建GRanges对象
  • 找到df1和amp;之间的重叠2
  • 使用重叠来合并细分

实施例

以下是上下文。如果我使用上面的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)]

0 个答案:

没有答案