我有 2 个数据框:
> access
V1 V2 V3
1 chr10 136122 136533
2 chr10 179432 179769
3 chr10 182988 183371
4 chr10 224234 224489
5 chr10 237693 237958
and
> peaks
V1 V2 V3
1 chr10 126122 126533
2 chr10 179450 179730
3 chr10 182788 183350
4 chr10 224244 224500
5 chr10 237695 237950
V2 和 V3 列是start and end两个数据框中的区域(范围)。我想保留这些行peaks
其数据框access$V1 == peaks$V1
AND 属于以下范围(或区域)access
数据框。例如,新的数据框将类似于:peaks
数据框的
第一行区域不存在于access
数据框,因此它将被分配类别U.
第 2 行peaks
落在给定范围内access
数据框(第二行)并将被分配类别B.
第 3 排peaks
并不完全落在该区域,但它在某种程度上与第三行中的区域重叠access
,为此我将分配类别A.
第 4 行peaks
在访问第 4 行区域末尾之后的 11 个数字处也没有完全重叠,这也将属于类别A.
第五行属于该区域,因此将属于类别B.
预期输出:
> newdf
V1 V2 V3 V4
1 chr10 126122 126533 U
2 chr10 179450 179730 B
3 chr10 182788 183350 A
4 chr10 224244 224500 A
5 chr10 237695 237950 B
以下是输入数据帧的输出:
> dput(peaks)
structure(list(V1 = structure(c(1L, 1L, 1L, 1L, 1L), .Label = "chr10", class = "factor"),
V2 = c(126122L, 179450L, 182788L, 224244L, 237695L), V3 = c(126533L,
179730L, 183350L, 224500L, 237950L)), .Names = c("V1", "V2",
"V3"), class = "data.frame", row.names = c(NA, -5L))
> dput(access)
structure(list(V1 = structure(c(1L, 1L, 1L, 1L, 1L), .Label = "chr10", class = "factor"),
V2 = c(136122L, 179432L, 182988L, 224234L, 237693L), V3 = c(136533L,
179769L, 183371L, 224489L, 237958L)), .Names = c("V1", "V2",
"V3"), class = "data.frame", row.names = c(NA, -5L))
Edit:
我的新访问 df 如下所示,现在我还想在最终输出 df 中附加最后一列:
> access
V1 V2 V3 V4
1 chr10 136122 136533 found
2 chr10 179432 179769 notFound
3 chr10 182988 183371 found
4 chr10 224234 224489 found
5 chr10 237693 237958 notFound
所以现在有一个额外的条件,如果 access 中的行落在峰值范围内,则还将 V4 中的值附加到最终 df 的新列中,如果未找到某个区域,则默认情况下将是notFound
。因此,最终输出将是:
> newdf
V1 V2 V3 V4 V5
1 chr10 126122 126533 U notFound
2 chr10 179450 179730 B notFound
3 chr10 182788 183350 A found
4 chr10 224244 224500 A found
5 chr10 237695 237950 B notFound
Here in row1$V5
该值未找到,因为未找到该区域,在其余情况下,我们从修改后的访问 df 中获取了 V5 中的值。