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

R 在另一个数据框的列上匹配数据框中的列,如果它们匹配,则添加新列,r,dataframe,multiple-columns,matching,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 另一个(d

我有两个大数据帧,其中一个(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)是这样的

我试图做的是检查df2的V2或V3列(相同)是否=或在df1的V2和V3范围内,如果不写入0,我想在df1的新列中写入df2的V5值。我想要的结果是:

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
.
.
.
你知道有什么好办法吗?
非常感谢。

正如@初学者在评论中已经提到的那样,
df2
的所有
V2
V3
值都与
df1
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")

我认为您需要使用
合并
。您可以在R帮助文件(
?merge
)中查看示例。在您的示例中,df2的所有V2和V3值在df1的V2中都精确匹配。如果这适用于您的整个数据,那么@dickoa建议的相对简单的
合并
是合适的。如果您的实际数据不同(因此您需要检查范围),如果您还可以编辑您的示例数据,那就更好了非常感谢您的回答Jaap和@初学者!!基于此,我不得不修改一些元素,我做到了!我们必须注意更多的参数!所以现在的代码是
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 <- df2[,-4]
df2$V2 <- df2$V2 + 2000
df1$V4 <- ifelse(df2$V2 >= df1$V2 & df2$V2 <= df1$V3, df2$V5, 0)