如何将数据帧1的每一行与数据帧2的每一行进行比较?

Menglan

我有两个看起来像这样的数据框:

x=data.frame(Name=c("200003","200260","400826","400863","500710"),Chr=c("chr1","chr1","chr2","chr3","chr3"),Position=c(11880,14415,13000,15000,18000))    
y=data.frame(name=c("geneA","geneB","geneC","geneD","geneE"),chrom=c("chr1","chr1","chr2","chr2","chr3"),Start=c(11873,11878,12000,14361,14361),End=c(14409,14419,14409,16765,19759))

> x
    Name  Chr Position
1 200003 chr1    11880
2 200260 chr1    14415
3 400826 chr2    13000
4 400863 chr3    15000
5 500710 chr3    18000

> y
   name chrom   Start   End
1 geneA  chr1   11873 14409
2 geneB  chr1   11878 14419
3 geneC  chr2   12000 14409
4 geneD  chr2   14361 16765
5 geneE  chr3   14361 19759

我想比较x和y,并返回一个由x中的每个Name和y的名称组成的数据框或列表,这些名称的色度与Chr相同,并且(Start,End)间隔包括Position。例如,

200003  geneA
200003  geneB
200260  geneB
400826  geneC
400863  geneE
500710  geneE

编辑:我能够使用以下代码获得结果

z=merge(x,y,by.x='Chr',by.y='chrom')
z=cbind(z,with(z, Position>=Start & Position<=End))
z=z[-which(z[,7]=="FALSE"),]
output=cbind(as.character(z$Name),as.character(z$name))

实际上,x和y以及大型数据集需要一段时间merge才能运行。有一个更好的方法吗?

阿伦

@BondedDust似乎已经删除了他的解决方案。他的解决方案唯一的问题是密钥还必须包括在内chrom

这是foverlaps从中使用data.table首先,我们将data.frames转换为data.tables:

require(data.table)
setDT(x)
setDT(y)

然后,由于foverlaps可以使用区间范围,因此我们将为以下内容添加一个虚拟列x

x[, Position2 := Position]

现在,对于每一个x,我们想知道,如果Chr, Position, Position2属于整个任意ychrome,Start,End我们y将按以下方式用作“键”:

setkey(y, chrom, Start, End)
foverlaps(x, y, by.x=c("Chr", "Position", "Position2"))[, list(Name, name)]
#      Name  name
# 1: 200003 geneA
# 2: 200003 geneB
# 3: 200260 geneB
# 4: 400826 geneC
# 5: 400863 geneE
# 6: 500710 geneE

data.frames中的列被异常命名和区分大小写-“ chrom”与“ Chr”。使用一致的名称可能会更容易。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何将一行数据与Google表格中另一张表的每一行数据进行比较?

来自分类Dev

数据帧对每一行的最大值进行归一化

来自分类Dev

如何将数据帧的每个元素乘以R中每一行的元素总和?

来自分类Dev

将每一行与数据框中的所有行进行比较,并将结果保存在每一行的列表中

来自分类Dev

在R中,对两个匹配数据帧的每一行进行排序

来自分类Dev

将向量减去到数据帧的每一行

来自分类Dev

R将数据帧的每一行分成两行

来自分类Dev

查找数据帧中每一行的出现次数

来自分类Dev

如何将按数据帧分组的另一行减去另一行?

来自分类Dev

每输入一行返回多行/列的数据帧

来自分类Dev

数据帧中每一行的矩阵乘法

来自分类Dev

将一行中的每个列与数据库sql中的每一行进行比较

来自分类Dev

有条件地对数据帧的每一行进行计数

来自分类Dev

在一定条件下,将每一行的数据帧拆分为多个数据帧

来自分类Dev

如何将一个数据帧中的一行的值与另一个数据帧中的多个行进行比较(包括计算)

来自分类Dev

如何为数据帧的每一行创建一个列联表

来自分类Dev

如何将一行数据与Google表格中另一张表的每一行数据进行比较?

来自分类Dev

Perl:将文件的每一行与该文件的每一行进行比较

来自分类Dev

数据帧每一行的单个条形图

来自分类Dev

在R中打印合并数据帧的每一行

来自分类Dev

如何将数据帧1的每一行与数据帧2的每一行进行比较?

来自分类Dev

R将数据帧的每一行分成两行

来自分类Dev

R - 将函数应用于数据帧的每一行,函数的参数是来自每一行的值

来自分类Dev

如何在python中对pandas数据帧的每一行进行计算?

来自分类Dev

如何根据行的排序值对pandas数据帧的每一行进行排序并返回列索引

来自分类Dev

修改数据帧每一行中的值

来自分类Dev

在 Pandas 数据帧的每一行上应用函数

来自分类Dev

如何将数据帧附加到另一个数据帧的每一行?

来自分类Dev

如何从数据帧每一行的一系列数字中选择特定值

Related 相关文章

  1. 1

    如何将一行数据与Google表格中另一张表的每一行数据进行比较?

  2. 2

    数据帧对每一行的最大值进行归一化

  3. 3

    如何将数据帧的每个元素乘以R中每一行的元素总和?

  4. 4

    将每一行与数据框中的所有行进行比较,并将结果保存在每一行的列表中

  5. 5

    在R中,对两个匹配数据帧的每一行进行排序

  6. 6

    将向量减去到数据帧的每一行

  7. 7

    R将数据帧的每一行分成两行

  8. 8

    查找数据帧中每一行的出现次数

  9. 9

    如何将按数据帧分组的另一行减去另一行?

  10. 10

    每输入一行返回多行/列的数据帧

  11. 11

    数据帧中每一行的矩阵乘法

  12. 12

    将一行中的每个列与数据库sql中的每一行进行比较

  13. 13

    有条件地对数据帧的每一行进行计数

  14. 14

    在一定条件下,将每一行的数据帧拆分为多个数据帧

  15. 15

    如何将一个数据帧中的一行的值与另一个数据帧中的多个行进行比较(包括计算)

  16. 16

    如何为数据帧的每一行创建一个列联表

  17. 17

    如何将一行数据与Google表格中另一张表的每一行数据进行比较?

  18. 18

    Perl:将文件的每一行与该文件的每一行进行比较

  19. 19

    数据帧每一行的单个条形图

  20. 20

    在R中打印合并数据帧的每一行

  21. 21

    如何将数据帧1的每一行与数据帧2的每一行进行比较?

  22. 22

    R将数据帧的每一行分成两行

  23. 23

    R - 将函数应用于数据帧的每一行,函数的参数是来自每一行的值

  24. 24

    如何在python中对pandas数据帧的每一行进行计算?

  25. 25

    如何根据行的排序值对pandas数据帧的每一行进行排序并返回列索引

  26. 26

    修改数据帧每一行中的值

  27. 27

    在 Pandas 数据帧的每一行上应用函数

  28. 28

    如何将数据帧附加到另一个数据帧的每一行?

  29. 29

    如何从数据帧每一行的一系列数字中选择特定值

热门标签

归档