匹配另一个数据框的列上的数据框中的列,如果它们匹配,则添加新列

时间:2014-05-28 13:47:05

标签: r dataframe multiple-columns matching

我有两个大数据框,一个(df1)有这个结构

    V1    V2    V3
1  Chr1  7507 10944
2  Chr1 10944 13170
3  Chr1 13170 20065
4  Chr1 20065 28273
5  Chr1 28273 29960
6  Chr1 29960 36599
7  Chr1 36599 37513
8  Chr1 37513 40360
9  Chr1 40360 48796
10 Chr1 48796 50661

另一个(df2)有这个

     V1    V2    V3 V4  V5
1  Chr1  7507  7507  1   1
2  Chr1 10944 10944  1   2
3  Chr1 13170 13170  1  22
4  Chr1 20065 20065  1   3
5  Chr1 28273 28273  1 161
6  Chr1 29960 29960  1  10
7  Chr1 36599 36599  1 604
8  Chr1 37513 37513  1 117
9  Chr1 40360 40360  1   8
10 Chr1 48796 48796  1   3

我要做的是检查df2的列V2或V3(是否相同)是否=或者在df1的V2和V3的范围之间然后我想要写入df2的V5的值如果不写0,则df1中的新列。我想要的结果如下:

Chr1    7507    10944   1
Chr1    10944   13170   2   
Chr1    13170   20065   22  
Chr1    20065   28273   3   
Chr1    28273   29960   161 
Chr1    29960   36599   10  
Chr1    36599   37513   604 
Chr1    37513   40360   117 
Chr1    40360   48796   8
.
.
.

你知道有什么好办法吗? 非常感谢你。

1 个答案:

答案 0 :(得分:0)

正如@beginneR在评论中已经提到的,V2的所有V3df2值都与V2的{​​{1}}完全匹配。如果我正确地解释你的问题,这可能不是你想要的。以下示例是我想要的内容。

阅读两个数据帧:

df1

在df2中删除V3,因为它与V2完全相同:

df1 <- read.table(header=TRUE, text="rn    V1    V2    V3
1  Chr1  7507 10944
2  Chr1 10944 13170
3  Chr1 13170 20065
4  Chr1 20065 28273
5  Chr1 28273 29960
6  Chr1 29960 36599
7  Chr1 36599 37513
8  Chr1 37513 40360
9  Chr1 40360 48796
10 Chr1 48796 50661")

df2 <- read.table(header=TRUE, text="rn     V1    V2    V3 V4  V5
1  Chr1  7507  7507  1   1
2  Chr1 10944 10944  1   2
3  Chr1 13170 13170  1  22
4  Chr1 20065 20065  1   3
5  Chr1 28273 28273  1 161
6  Chr1 29960 29960  1  10
7  Chr1 36599 36599  1 604
8  Chr1 37513 37513  1 117
9  Chr1 40360 40360  1   8
10 Chr1 48796 48796  1   3")

使df2的V2值更高

df2 <- df2[,-4]

使用df2$V2 <- df2$V2 + 2000 功能,当满足要求时,您可以将d5的值分配给df1中的新变量:

ifelse