簡體   English   中英

如何在R中按范圍合並兩個數據幀?

[英]How to merge two data frames by ranges in R?

假設我有兩個數據幀,例如:

set.seed(123)
df0<-data.frame(pos=3:12, 
                count0=rbinom(10, 50, 0.5),
                count2=rbinom(10, 20, 0.5))
df0
   pos count0 count2
1    3     23     14
2    4     28     10
3    5     24     11
4    6     29     10
5    7     30      7
6    8     19     13
7    9     25      8
8   10     29      6
9   11     25      9
10  12     25     14

df1<-data.frame(start=c(4, 7, 11, 14), 
                 end=c(6, 9, 12, 15), 
                 cnv=c(1, 2, 3, 4))
df1
  start end cnv
1     4   6   1
2     7   9   2
3    11  12   3
4    14  15   4

我想要的是使用df0$posdf1$startdf1$end的范圍合並df0和df1。 如果pos落在start:end范圍內,則從df1填充cnv ,否則將cnv設置為零。 上面示例的輸出為:

   pos count0 count2 cnv
1    3     23     14   0
2    4     28     10   1
3    5     24     11   1
4    6     29     10   1
5    7     30      7   2
6    8     19     13   2
7    9     25      8   2
8   10     29      6   0
9   11     25      9   3
10  12     25     14   3

我們可以用sapply發現if有其存在范圍內的折射率else返回0。

df0$cnv <- sapply(df0$pos, function(x) {
    inds <- x >= df1$start  & x <= df1$end
    if (any(inds))
      df1$cnv[inds]
    else 0
})


df0
#   pos count0 count2 cnv
#1    3     23     14   0
#2    4     28     10   1
#3    5     24     11   1
#4    6     29     10   1
#5    7     30      7   2
#6    8     19     13   2
#7    9     25      8   2
#8   10     29      6   0
#9   11     25      9   3
#10  12     25     14   3

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM