簡體   English   中英

替換 r 中的嵌套循環(具有多個條件)

[英]replacing nested loop in r (with multiple criteria)

我是 r 和論壇的新手 - 我已經搜索了論壇,但找不到關於如何執行此操作的非常簡單的描述。

我試圖通過覆蓋A 中某些條件與 B 匹配的記錄來組​​合兩個數據集 A 和 B。以下是數據示例:

A:

date farmID ip lm
146  F10    10 0.5
147  F10    11 0.6
148  F10    6  0.6
149  F10    8  0.1
146  F11    10 0.4
147  F11    12 0.3
148  F11    4  0.5
149  F11    5  0.3

乙:

farmID start end ip lm
F10    140   145 3  0.4
F10    140   147 15 0.8
F11    145   146 13 0.9
F11    146   149 20 0.7

我需要執行以下操作:如果日期介於開始和結束之間(不包括結束),並且 farmID 相同,則覆蓋 B 中的列 ip 和 lm

結果將是:

date farmID ip  lm
146  F10    15  0.8   <-- this one changed
147  F10    15  0.8   <-- this one changed
148  F10    6   0.6
149  F10    8   0.1
146  F11    20  0.7   <-- this one changed
147  F11    20  0.7   <-- this one changed
148  F11    20  0.7   <-- this one changed
149  F11    20  0.7   <-- this one changed

我首先嘗試使用嵌套循環來遍歷兩個表,但是我在 A 中有大約 800,000 條記錄,所以這太慢了。

for (i in seq(1:nrow(A))){
  for (j in seq(1:nrow(B))){
    if (B$farmID[j] == A$farmID[i]){
      if (B$start[j] <= A$date[i] | A$date[i] > B$end[j]){
     
        A$lm[i] <- B$lm[j]
        A$ip[i] <- B$ip[j]
  
      }
    }
  }

我知道這不是 r 的正確方法,我應該使用矢量化函數。

我發現這篇非常相似的帖子沒有 FarmID 的第二個標准,所以我想我可以用 data.table 來做到這一點 - 替換 R 中的嵌套循環

有人可以告訴我執行此操作的明智方法嗎?

編輯

這需要一段時間才能縮小到有用的大小。 我試圖選擇有代表性的數據。

輸出(B)


structure(list(SiteID = c("FS0013", "FS0013", "FS0056", "FS0068", 
"FS0068", "FS0206", "FS0206", "FS0407", "FS0408", "FS0408", "FS0694", 
"FS0695", "FS0695", "FS0695", "FS1033", "FS1036", "FS1039", "FS1039", 
"FS1335", "FS1335"), FromDate = c(42401L, 42758L, 42443L, 42969L, 
43166L, 43782L, 43860L, 43119L, 42642L, 43228L, 42852L, 42527L, 
42895L, 43918L, 43848L, 42711L, 42569L, 43255L, 43954L, 43968L
), ToDate = c(42766L, 43123L, 42808L, 43334L, 43531L, 44147L, 
44225L, 43484L, 43007L, 43593L, 43217L, 42892L, 43260L, 44283L, 
44213L, 43076L, 42934L, 43620L, 44319L, 44333L), LFF_On = c(1L, 
1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 1L, 1L, 0L, 0L, 1L, 1L, 0L, 0L, 
1L, 1L, 1L), ip = c(4L, 4L, 1L, 3L, 3L, 5L, 5L, NA, NA, 6L, 9L, 
NA, NA, 1L, 5L, NA, NA, 6L, 9L, 9L), lm = c(NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 2L)), class = "data.frame", row.names = c(NA, 
-20L))

輸出(A)

structure(list(date = c(42395L, 42395L, 42395L, 42395L, 42395L, 
42395L, 42395L, 42395L, 42395L, 42395L, 42395L, 42395L, 42396L, 
42396L, 42396L, 42396L, 42396L, 42396L, 42396L, 42396L, 42396L, 
42396L, 42396L, 42396L, 42397L, 42397L, 42397L, 42397L, 42397L, 
42397L, 42397L, 42397L, 42397L, 42397L, 42397L, 42397L, 42398L, 
42398L, 42398L, 42398L, 42398L, 42398L, 42398L, 42398L, 42398L, 
42398L, 42398L, 42398L, 42399L, 42399L, 42399L, 42399L, 42399L, 
42399L, 42399L, 42399L, 42399L, 42399L, 42399L, 42399L, 42400L, 
42400L, 42400L, 42400L, 42400L, 42400L, 42400L, 42400L, 42400L, 
42400L, 42400L, 42400L, 42401L, 42401L, 42401L, 42401L, 42401L, 
42401L, 42401L, 42401L, 42401L, 42401L, 42401L, 42401L, 42402L, 
42402L, 42402L, 42402L, 42402L, 42402L, 42402L, 42402L, 42402L, 
42402L, 42402L, 42402L, 42403L, 42403L, 42403L, 42403L, 42403L, 
42403L, 42403L, 42403L, 42403L, 42403L, 42403L, 42403L, 42404L, 
42404L, 42404L, 42404L, 42404L, 42404L, 42404L, 42404L, 42404L, 
42404L, 42404L, 42404L, 42405L, 42405L, 42405L, 42405L, 42405L, 
42405L, 42405L, 42405L, 42405L, 42405L, 42405L, 42405L, 42406L, 
42406L, 42406L, 42406L, 42406L, 42406L, 42406L, 42406L, 42406L, 
42406L, 42406L, 42406L, 42407L, 42407L, 42407L, 42407L, 42407L, 
42407L, 42407L, 42407L, 42407L, 42407L, 42407L, 42407L, 42395L, 
42395L, 42395L, 42395L, 42395L, 42395L, 42395L, 42395L, 42395L, 
42395L, 42395L, 42395L, 42395L, 42395L, 42395L, 42395L, 42395L, 
42395L, 42395L, 42395L, 42395L, 42395L, 42395L, 42395L, 42395L, 
42395L, 42395L, 42395L, 42395L, 42395L, 42395L, 42395L, 42395L, 
42395L, 42395L, 42395L, 42395L, 42395L, 42395L, 42395L, 42395L, 
42395L, 42395L, 42395L, 42395L, 42395L, 42395L, 42395L, 42395L, 
42395L, 42395L, 42395L, 42395L, 42395L, 42395L, 42395L, 42395L, 
42395L, 42395L, 42395L, 42643L, 42643L, 42643L, 42643L, 42643L, 
42643L, 42643L, 42643L, 42643L, 42643L, 42643L, 42643L, 42800L, 
42800L, 42800L, 42800L, 42800L, 42800L, 42800L, 42800L, 42800L, 
42800L, 42800L, 42800L, 42801L, 42801L, 42801L, 42801L, 42801L, 
42801L, 42801L, 42801L, 42801L, 42801L, 42801L, 42801L, 42802L, 
42802L, 42802L, 42802L, 42802L, 42802L, 42802L, 42802L, 42802L, 
42802L, 42802L, 42802L, 42803L, 42803L, 42803L, 42803L, 42803L, 
42803L, 42803L, 42803L, 42803L, 42803L, 42803L, 42803L, 42804L, 
42804L, 42804L, 42804L, 42804L, 42804L, 42804L, 42804L, 42804L, 
42804L, 42804L, 42804L, 42805L, 42805L, 42805L, 42805L, 42805L, 
42805L, 42805L, 42805L, 42805L, 42805L, 42805L, 42805L, 42806L, 
42806L, 42806L, 42806L, 42806L, 42806L, 42806L, 42806L, 42806L, 
42806L, 42806L, 42806L, 42807L, 42807L, 42807L, 42807L, 42807L, 
42807L, 42807L, 42807L, 42807L, 42807L, 42807L, 42807L, 42808L, 
42808L, 42808L, 42808L, 42808L, 42808L, 42808L, 42808L, 42808L, 
42808L, 42808L, 42808L, 42809L, 42809L, 42809L, 42809L, 42809L, 
42809L, 42809L, 42809L, 42809L, 42809L, 42809L, 42809L, 42810L, 
42810L, 42810L, 42810L, 42810L, 42810L, 42810L, 42810L, 42810L, 
42810L, 42810L, 42810L, 42811L, 42811L, 42811L, 42811L, 42811L, 
42811L, 42811L, 42811L, 42811L, 42811L, 42811L, 42811L, 42894L, 
42894L, 42894L, 42894L, 42894L, 42894L, 42894L, 42894L, 42894L, 
42894L, 42894L, 42894L, 42895L, 42895L, 42895L, 42895L, 42895L, 
42895L, 42895L, 42895L, 42895L, 42895L, 42895L, 42895L, 43160L, 
43160L, 43160L, 43160L, 43160L, 43160L, 43160L, 43160L, 43160L, 
43160L, 43160L, 43160L, 43161L, 43161L, 43161L, 43161L, 43161L, 
43161L, 43161L, 43161L, 43161L, 43161L, 43161L, 43161L, 43162L, 
43162L, 43162L, 43162L, 43162L, 43162L, 43162L, 43162L, 43162L, 
43162L, 43162L, 43162L, 43163L, 43163L, 43163L, 43163L, 43163L, 
43163L, 43163L, 43163L, 43163L, 43163L, 43163L, 43163L, 43164L, 
43164L, 43164L, 43164L, 43164L, 43164L, 43164L, 43164L, 43164L, 
43164L, 43164L, 43164L, 43165L, 43165L, 43165L, 43165L, 43165L, 
43165L, 43165L, 43165L, 43165L, 43165L, 43165L, 43165L, 43166L, 
43166L, 43166L, 43166L, 43166L, 43166L, 43166L, 43166L, 43166L, 
43166L, 43166L, 43166L, 43167L, 43167L, 43167L, 43167L, 43167L, 
43167L, 43167L, 43167L, 43167L, 43167L, 43167L, 43167L, 43168L, 
43168L, 43168L, 43168L, 43168L, 43168L, 43168L, 43168L, 43168L, 
43168L, 43168L, 43168L, 43169L, 43169L, 43169L, 43169L, 43169L, 
43169L, 43169L, 43169L, 43169L, 43169L, 43169L, 43169L, 43618L, 
43618L, 43618L, 43618L, 43618L, 43618L, 43618L, 43618L, 43618L, 
43618L, 43618L, 43618L, 43619L, 43619L, 43619L, 43619L, 43619L, 
43619L, 43619L, 43619L, 43619L, 43619L, 43619L, 43619L, 43620L, 
43620L, 43620L, 43620L, 43620L, 43620L, 43620L, 43620L, 43620L, 
43620L, 43620L, 43620L, 43851L, 43851L, 43851L, 43851L, 43851L, 
43851L, 43851L, 43851L, 43851L, 43851L, 43851L, 43851L, 43852L, 
43852L, 43852L, 43852L, 43852L, 43852L, 43852L, 43852L, 43852L, 
43852L, 43852L, 43852L, 43853L, 43853L, 43853L, 43853L, 43853L, 
43853L, 43853L, 43853L, 43853L, 43853L, 43853L, 43853L, 43854L, 
43854L, 43854L, 43854L, 43854L, 43854L, 43854L, 43854L, 43854L, 
43854L, 43854L, 43854L, 43855L, 43855L, 43855L, 43855L, 43855L, 
43855L, 43855L, 43855L, 43855L, 43855L, 43855L, 43855L, 43856L, 
43856L, 43856L, 43856L, 43856L, 43856L, 43856L, 43856L, 43856L, 
43856L, 43856L, 43856L, 43857L, 43857L, 43857L, 43857L, 43857L, 
43857L, 43857L, 43857L, 43857L, 43857L, 43857L, 43857L, 43858L, 
43858L, 43858L, 43858L, 43858L, 43858L, 43858L, 43858L, 43858L, 
43858L, 43858L, 43858L, 43859L, 43859L, 43859L, 43859L, 43859L, 
43859L, 43859L, 43859L, 43859L, 43859L, 43859L, 43859L, 43860L, 
43860L, 43860L, 43860L, 43860L, 43860L, 43860L, 43860L, 43860L, 
43860L, 43860L, 43860L, 43861L, 43861L, 43861L, 43861L, 43861L, 
43861L, 43861L, 43861L, 43861L, 43861L, 43861L, 43861L, 43862L, 
43862L, 43862L, 43862L, 43862L, 43862L, 43862L, 43862L, 43862L, 
43862L, 43862L, 43862L, 43863L, 43863L, 43863L, 43863L, 43863L, 
43863L, 43863L, 43863L, 43863L, 43863L, 43863L, 43863L, 43864L, 
43864L, 43864L, 43864L, 43864L, 43864L, 43864L, 43864L, 43864L, 
43864L, 43864L, 43864L, 43865L, 43865L, 43865L, 43865L, 43865L, 
43865L, 43865L, 43865L, 43865L, 43865L, 43865L, 43865L, 43866L, 
43866L, 43866L, 43866L, 43866L, 43866L, 43866L, 43866L, 43866L, 
43866L, 43866L, 43866L, 43867L, 43867L, 43867L, 43867L, 43867L, 
43867L, 43867L, 43867L, 43867L, 43867L, 43867L, 43867L, 43868L, 
43868L, 43868L, 43868L, 43868L, 43868L, 43868L, 43868L, 43868L, 
43868L, 43868L, 43868L, 43869L, 43869L, 43869L, 43869L, 43869L, 
43869L, 43869L, 43869L, 43869L, 43869L, 43869L, 43869L), SiteID = c("FS0013", 
"FS0056", "FS0068", "FS0206", "FS0407", "FS0408", "FS0694", "FS0695", 
"FS1033", "FS1036", "FS1039", "FS1335", "FS0013", "FS0056", "FS0068", 
"FS0206", "FS0407", "FS0408", "FS0694", "FS0695", "FS1033", "FS1036", 
"FS1039", "FS1335", "FS0013", "FS0056", "FS0068", "FS0206", "FS0407", 
"FS0408", "FS0694", "FS0695", "FS1033", "FS1036", "FS1039", "FS1335", 
"FS0013", "FS0056", "FS0068", "FS0206", "FS0407", "FS0408", "FS0694", 
"FS0695", "FS1033", "FS1036", "FS1039", "FS1335", "FS0013", "FS0056", 
"FS0068", "FS0206", "FS0407", "FS0408", "FS0694", "FS0695", "FS1033", 
"FS1036", "FS1039", "FS1335", "FS0013", "FS0056", "FS0068", "FS0206", 
"FS0407", "FS0408", "FS0694", "FS0695", "FS1033", "FS1036", "FS1039", 
"FS1335", "FS0013", "FS0056", "FS0068", "FS0206", "FS0407", "FS0408", 
"FS0694", "FS0695", "FS1033", "FS1036", "FS1039", "FS1335", "FS0013", 
"FS0056", "FS0068", "FS0206", "FS0407", "FS0408", "FS0694", "FS0695", 
"FS1033", "FS1036", "FS1039", "FS1335", "FS0013", "FS0056", "FS0068", 
"FS0206", "FS0407", "FS0408", "FS0694", "FS0695", "FS1033", "FS1036", 
"FS1039", "FS1335", "FS0013", "FS0056", "FS0068", "FS0206", "FS0407", 
"FS0408", "FS0694", "FS0695", "FS1033", "FS1036", "FS1039", "FS1335", 
"FS0013", "FS0056", "FS0068", "FS0206", "FS0407", "FS0408", "FS0694", 
"FS0695", "FS1033", "FS1036", "FS1039", "FS1335", "FS0013", "FS0056", 
"FS0068", "FS0206", "FS0407", "FS0408", "FS0694", "FS0695", "FS1033", 
"FS1036", "FS1039", "FS1335", "FS0013", "FS0056", "FS0068", "FS0206", 
"FS0407", "FS0408", "FS0694", "FS0695", "FS1033", "FS1036", "FS1039", 
"FS1335", "FS0013", "FS0056", "FS0068", "FS0206", "FS0407", "FS0408", 
"FS0694", "FS0695", "FS1033", "FS1036", "FS1039", "FS1335", "FS0013", 
"FS0056", "FS0068", "FS0206", "FS0407", "FS0408", "FS0694", "FS0695", 
"FS1033", "FS1036", "FS1039", "FS1335", "FS0013", "FS0056", "FS0068", 
"FS0206", "FS0407", "FS0408", "FS0694", "FS0695", "FS1033", "FS1036", 
"FS1039", "FS1335", "FS0013", "FS0056", "FS0068", "FS0206", "FS0407", 
"FS0408", "FS0694", "FS0695", "FS1033", "FS1036", "FS1039", "FS1335", 
"FS0013", "FS0056", "FS0068", "FS0206", "FS0407", "FS0408", "FS0694", 
"FS0695", "FS1033", "FS1036", "FS1039", "FS1335", "FS0013", "FS0056", 
"FS0068", "FS0206", "FS0407", "FS0408", "FS0694", "FS0695", "FS1033", 
"FS1036", "FS1039", "FS1335", "FS0013", "FS0056", "FS0068", "FS0206", 
"FS0407", "FS0408", "FS0694", "FS0695", "FS1033", "FS1036", "FS1039", 
"FS1335", "FS0013", "FS0056", "FS0068", "FS0206", "FS0407", "FS0408", 
"FS0694", "FS0695", "FS1033", "FS1036", "FS1039", "FS1335", "FS0013", 
"FS0056", "FS0068", "FS0206", "FS0407", "FS0408", "FS0694", "FS0695", 
"FS1033", "FS1036", "FS1039", "FS1335", "FS0013", "FS0056", "FS0068", 
"FS0206", "FS0407", "FS0408", "FS0694", "FS0695", "FS1033", "FS1036", 
"FS1039", "FS1335", "FS0013", "FS0056", "FS0068", "FS0206", "FS0407", 
"FS0408", "FS0694", "FS0695", "FS1033", "FS1036", "FS1039", "FS1335", 
"FS0013", "FS0056", "FS0068", "FS0206", "FS0407", "FS0408", "FS0694", 
"FS0695", "FS1033", "FS1036", "FS1039", "FS1335", "FS0013", "FS0056", 
"FS0068", "FS0206", "FS0407", "FS0408", "FS0694", "FS0695", "FS1033", 
"FS1036", "FS1039", "FS1335", "FS0013", "FS0056", "FS0068", "FS0206", 
"FS0407", "FS0408", "FS0694", "FS0695", "FS1033", "FS1036", "FS1039", 
"FS1335", "FS0013", "FS0056", "FS0068", "FS0206", "FS0407", "FS0408", 
"FS0694", "FS0695", "FS1033", "FS1036", "FS1039", "FS1335", "FS0013", 
"FS0056", "FS0068", "FS0206", "FS0407", "FS0408", "FS0694", "FS0695", 
"FS1033", "FS1036", "FS1039", "FS1335", "FS0013", "FS0056", "FS0068", 
"FS0206", "FS0407", "FS0408", "FS0694", "FS0695", "FS1033", "FS1036", 
"FS1039", "FS1335", "FS0013", "FS0056", "FS0068", "FS0206", "FS0407", 
"FS0408", "FS0694", "FS0695", "FS1033", "FS1036", "FS1039", "FS1335", 
"FS0013", "FS0056", "FS0068", "FS0206", "FS0407", "FS0408", "FS0694", 
"FS0695", "FS1033", "FS1036", "FS1039", "FS1335", "FS0013", "FS0056", 
"FS0068", "FS0206", "FS0407", "FS0408", "FS0694", "FS0695", "FS1033", 
"FS1036", "FS1039", "FS1335", "FS0013", "FS0056", "FS0068", "FS0206", 
"FS0407", "FS0408", "FS0694", "FS0695", "FS1033", "FS1036", "FS1039", 
"FS1335", "FS0013", "FS0056", "FS0068", "FS0206", "FS0407", "FS0408", 
"FS0694", "FS0695", "FS1033", "FS1036", "FS1039", "FS1335", "FS0013", 
"FS0056", "FS0068", "FS0206", "FS0407", "FS0408", "FS0694", "FS0695", 
"FS1033", "FS1036", "FS1039", "FS1335", "FS0013", "FS0056", "FS0068", 
"FS0206", "FS0407", "FS0408", "FS0694", "FS0695", "FS1033", "FS1036", 
"FS1039", "FS1335", "FS0013", "FS0056", "FS0068", "FS0206", "FS0407", 
"FS0408", "FS0694", "FS0695", "FS1033", "FS1036", "FS1039", "FS1335", 
"FS0013", "FS0056", "FS0068", "FS0206", "FS0407", "FS0408", "FS0694", 
"FS0695", "FS1033", "FS1036", "FS1039", "FS1335", "FS0013", "FS0056", 
"FS0068", "FS0206", "FS0407", "FS0408", "FS0694", "FS0695", "FS1033", 
"FS1036", "FS1039", "FS1335", "FS0013", "FS0056", "FS0068", "FS0206", 
"FS0407", "FS0408", "FS0694", "FS0695", "FS1033", "FS1036", "FS1039", 
"FS1335", "FS0013", "FS0056", "FS0068", "FS0206", "FS0407", "FS0408", 
"FS0694", "FS0695", "FS1033", "FS1036", "FS1039", "FS1335", "FS0013", 
"FS0056", "FS0068", "FS0206", "FS0407", "FS0408", "FS0694", "FS0695", 
"FS1033", "FS1036", "FS1039", "FS1335", "FS0013", "FS0056", "FS0068", 
"FS0206", "FS0407", "FS0408", "FS0694", "FS0695", "FS1033", "FS1036", 
"FS1039", "FS1335", "FS0013", "FS0056", "FS0068", "FS0206", "FS0407", 
"FS0408", "FS0694", "FS0695", "FS1033", "FS1036", "FS1039", "FS1335", 
"FS0013", "FS0056", "FS0068", "FS0206", "FS0407", "FS0408", "FS0694", 
"FS0695", "FS1033", "FS1036", "FS1039", "FS1335", "FS0013", "FS0056", 
"FS0068", "FS0206", "FS0407", "FS0408", "FS0694", "FS0695", "FS1033", 
"FS1036", "FS1039", "FS1335", "FS0013", "FS0056", "FS0068", "FS0206", 
"FS0407", "FS0408", "FS0694", "FS0695", "FS1033", "FS1036", "FS1039", 
"FS1335", "FS0013", "FS0056", "FS0068", "FS0206", "FS0407", "FS0408", 
"FS0694", "FS0695", "FS1033", "FS1036", "FS1039", "FS1335", "FS0013", 
"FS0056", "FS0068", "FS0206", "FS0407", "FS0408", "FS0694", "FS0695", 
"FS1033", "FS1036", "FS1039", "FS1335", "FS0013", "FS0056", "FS0068", 
"FS0206", "FS0407", "FS0408", "FS0694", "FS0695", "FS1033", "FS1036", 
"FS1039", "FS1335", "FS0013", "FS0056", "FS0068", "FS0206", "FS0407", 
"FS0408", "FS0694", "FS0695", "FS1033", "FS1036", "FS1039", "FS1335", 
"FS0013", "FS0056", "FS0068", "FS0206", "FS0407", "FS0408", "FS0694", 
"FS0695", "FS1033", "FS1036", "FS1039", "FS1335", "FS0013", "FS0056", 
"FS0068", "FS0206", "FS0407", "FS0408", "FS0694", "FS0695", "FS1033", 
"FS1036", "FS1039", "FS1335", "FS0013", "FS0056", "FS0068", "FS0206", 
"FS0407", "FS0408", "FS0694", "FS0695", "FS1033", "FS1036", "FS1039", 
"FS1335", "FS0013", "FS0056", "FS0068", "FS0206", "FS0407", "FS0408", 
"FS0694", "FS0695", "FS1033", "FS1036", "FS1039", "FS1335", "FS0013", 
"FS0056", "FS0068", "FS0206", "FS0407", "FS0408", "FS0694", "FS0695", 
"FS1033", "FS1036", "FS1039", "FS1335", "FS0013", "FS0056", "FS0068", 
"FS0206", "FS0407", "FS0408", "FS0694", "FS0695", "FS1033", "FS1036", 
"FS1039", "FS1335", "FS0013", "FS0056", "FS0068", "FS0206", "FS0407", 
"FS0408", "FS0694", "FS0695", "FS1033", "FS1036", "FS1039", "FS1335", 
"FS0013", "FS0056", "FS0068", "FS0206", "FS0407", "FS0408", "FS0694", 
"FS0695", "FS1033", "FS1036", "FS1039", "FS1335", "FS0013", "FS0056", 
"FS0068", "FS0206", "FS0407", "FS0408", "FS0694", "FS0695", "FS1033", 
"FS1036", "FS1039", "FS1335", "FS0013", "FS0056", "FS0068", "FS0206", 
"FS0407", "FS0408", "FS0694", "FS0695", "FS1033", "FS1036", "FS1039", 
"FS1335", "FS0013", "FS0056", "FS0068", "FS0206", "FS0407", "FS0408", 
"FS0694", "FS0695", "FS1033", "FS1036", "FS1039", "FS1335", "FS0013", 
"FS0056", "FS0068", "FS0206", "FS0407", "FS0408", "FS0694", "FS0695", 
"FS1033", "FS1036", "FS1039", "FS1335", "FS0013", "FS0056", "FS0068", 
"FS0206", "FS0407", "FS0408", "FS0694", "FS0695", "FS1033", "FS1036", 
"FS1039", "FS1335"), LFF_On = c(1L, 1L, 0L, 0L, 0L, 1L, 1L, 1L, 
1L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 0L, 
1L, 0L, 0L, 1L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 
0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 1L, 1L, 0L, 0L, 1L, 1L, 0L, 1L, 
0L, 1L, 0L, 0L, 1L, 1L, 0L, 0L, 1L, 0L, 1L, 0L, 0L, 0L, 0L, 1L, 
1L, 0L, 0L, 1L, 1L, 1L, 0L, 0L, 1L, 1L, 0L, 1L, 1L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 
0L, 1L, 1L, 0L, 1L, 0L, 1L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 0L, 1L, 
1L, 0L, 0L, 1L, 1L, 0L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 0L, 
0L, 0L, 1L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 1L, 1L, 0L, 
1L, 1L, 0L, 0L, 1L, 0L, 0L, 1L, 1L, 1L, 0L, 1L, 1L, 0L, 1L, 0L, 
1L, 0L, 1L, 1L, 1L, 0L, 1L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 1L, 0L, 
1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 0L, 1L, 0L, 0L, 1L, 
0L, 0L, 1L, 0L, 0L, 1L, 0L, 1L, 1L, 0L, 1L, 1L, 0L, 0L, 0L, 1L, 
0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 0L, 0L, 0L, 0L, 1L, 1L, 
0L, 0L, 1L, 0L, 0L, 1L, 1L, 0L, 1L, 0L, 0L, 1L, 1L, 1L, 0L, 0L, 
0L, 1L, 0L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 0L, 1L, 1L, 
1L, 0L, 1L, 0L, 1L, 1L, 0L, 1L, 0L, 1L, 0L, 0L, 0L, 1L, 1L, 0L, 
0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 1L, 1L, 0L, 1L, 0L, 0L, 0L, 
1L, 0L, 0L, 0L, 1L, 0L, 1L, 1L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 1L, 
0L, 0L, 1L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 
0L, 1L, 1L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 0L, 0L, 1L, 
0L, 1L, 1L, 0L, 0L, 0L, 1L, 0L, 1L, 1L, 0L, 1L, 0L, 0L, 1L, 1L, 
0L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 1L, 0L, 0L, 0L, 
0L, 1L, 0L, 0L, 1L, 1L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 1L, 1L, 1L, 
0L, 1L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 0L, 0L, 1L, 1L, 0L, 0L, 
0L, 0L, 1L, 0L, 0L, 0L, 0L, 1L, 0L, 1L, 0L, 1L, 0L, 0L, 0L, 1L, 
0L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 1L, 0L, 0L, 1L, 
1L, 0L, 1L, 0L, 1L, 1L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 1L, 1L, 1L, 
1L, 1L, 1L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 1L, 0L, 0L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 0L, 1L, 0L, 0L, 1L, 1L, 
0L, 0L, 1L, 1L, 1L, 0L, 0L, 1L, 1L, 0L, 1L, 1L, 0L, 1L, 1L, 0L, 
1L, 1L, 0L, 0L, 0L, 0L, 1L, 0L, 1L, 1L, 0L, 0L, 1L, 1L, 0L, 1L, 
1L, 1L, 0L, 0L, 0L, 0L, 1L, 0L, 1L, 1L, 0L, 0L, 0L, 1L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 0L, 1L, 0L, 0L, 1L, 0L, 0L, 
1L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 0L, 1L, 0L, 0L, 
0L, 0L, 1L, 1L, 0L, 0L, 1L, 0L, 1L, 0L, 1L, 1L, 0L, 1L, 0L, 0L, 
0L, 0L, 0L, 0L, 1L, 0L, 1L, 1L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 1L, 
0L, 0L, 1L, 0L, 0L, 1L, 0L, 1L, 0L, 0L, 1L, 1L, 1L, 0L, 1L, 1L, 
0L, 0L, 0L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 0L, 0L, 1L, 1L, 
1L, 0L, 1L, 1L, 0L, 1L, 1L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 0L, 0L, 
1L, 1L, 0L, 0L, 0L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 1L, 
1L, 1L, 0L, 0L, 0L, 1L, 0L, 0L, 1L, 1L, 0L, 1L, 1L, 0L, 1L, 1L, 
1L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 1L, 0L, 1L, 1L, 1L, 0L, 0L, 
1L, 0L, 0L, 1L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 1L, 0L, 
1L, 1L, 1L, 0L, 0L, 1L, 1L, 0L, 0L, 1L, 0L, 1L, 0L, 1L, 1L, 0L, 
0L, 0L, 1L, 0L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 1L, 0L, 1L, 0L, 1L, 0L, 1L, 0L, 1L, 1L, 0L, 1L, 0L, 
1L, 0L, 0L, 0L, 1L, 0L, 0L, 1L, 0L, 1L, 0L, 1L, 1L, 0L, 0L, 0L, 
1L, 0L, 0L, 0L), ip = c(9L, 9L, 5L, 15L, 10L, 13L, 7L, 8L, 6L, 
8L, 5L, 10L, 15L, 5L, 13L, 15L, 11L, 9L, 12L, 14L, 7L, 6L, 5L, 
14L, 11L, 13L, 8L, 8L, 13L, 6L, 15L, 12L, 5L, 10L, 10L, 12L, 
10L, 7L, 6L, 11L, 14L, 10L, 15L, 7L, 8L, 5L, 5L, 9L, 13L, 15L, 
7L, 9L, 12L, 5L, 11L, 5L, 8L, 7L, 9L, 7L, 6L, 7L, 13L, 5L, 14L, 
14L, 11L, 12L, 15L, 13L, 14L, 7L, 7L, 13L, 14L, 13L, 9L, 15L, 
10L, 13L, 5L, 10L, 8L, 11L, 8L, 7L, 7L, 12L, 11L, 11L, 8L, 10L, 
14L, 9L, 9L, 10L, 12L, 15L, 13L, 10L, 8L, 9L, 15L, 12L, 12L, 
5L, 5L, 10L, 8L, 6L, 13L, 13L, 6L, 10L, 5L, 11L, 9L, 9L, 9L, 
14L, 6L, 6L, 6L, 9L, 13L, 8L, 9L, 10L, 7L, 14L, 12L, 12L, 10L, 
11L, 8L, 7L, 8L, 12L, 11L, 7L, 8L, 12L, 10L, 11L, 12L, 5L, 14L, 
7L, 10L, 7L, 11L, 9L, 15L, 13L, 7L, 5L, 10L, 6L, 11L, 11L, 10L, 
14L, 12L, 10L, 8L, 8L, 10L, 5L, 13L, 5L, 6L, 15L, 13L, 13L, 9L, 
8L, 6L, 13L, 13L, 14L, 11L, 8L, 5L, 10L, 8L, 12L, 12L, 6L, 15L, 
13L, 5L, 12L, 7L, 10L, 9L, 11L, 9L, 11L, 11L, 5L, 10L, 5L, 14L, 
5L, 12L, 8L, 12L, 5L, 9L, 9L, 12L, 9L, 14L, 9L, 7L, 7L, 12L, 
10L, 9L, 11L, 9L, 9L, 11L, 9L, 6L, 6L, 5L, 13L, 11L, 15L, 7L, 
10L, 13L, 8L, 5L, 9L, 6L, 13L, 11L, 8L, 9L, 5L, 11L, 14L, 6L, 
6L, 9L, 12L, 7L, 6L, 6L, 8L, 13L, 6L, 13L, 6L, 6L, 14L, 5L, 12L, 
5L, 14L, 9L, 13L, 7L, 10L, 13L, 6L, 11L, 12L, 7L, 5L, 13L, 15L, 
15L, 10L, 14L, 15L, 14L, 9L, 9L, 5L, 10L, 10L, 10L, 10L, 12L, 
14L, 12L, 10L, 15L, 15L, 12L, 15L, 6L, 12L, 10L, 13L, 14L, 8L, 
5L, 12L, 9L, 5L, 8L, 14L, 9L, 7L, 6L, 15L, 10L, 8L, 12L, 6L, 
13L, 15L, 10L, 13L, 5L, 10L, 9L, 9L, 12L, 10L, 7L, 9L, 11L, 7L, 
11L, 9L, 5L, 12L, 14L, 14L, 15L, 8L, 14L, 9L, 7L, 11L, 9L, 12L, 
8L, 6L, 9L, 14L, 13L, 12L, 13L, 11L, 8L, 5L, 5L, 9L, 5L, 6L, 
14L, 14L, 12L, 10L, 7L, 15L, 8L, 5L, 12L, 15L, 14L, 5L, 7L, 7L, 
11L, 6L, 15L, 14L, 7L, 15L, 10L, 13L, 11L, 11L, 14L, 10L, 12L, 
8L, 8L, 8L, 8L, 14L, 7L, 9L, 10L, 11L, 10L, 8L, 10L, 14L, 14L, 
13L, 11L, 7L, 8L, 10L, 8L, 9L, 12L, 11L, 11L, 14L, 13L, 9L, 11L, 
7L, 7L, 9L, 13L, 6L, 10L, 9L, 11L, 8L, 7L, 7L, 11L, 12L, 8L, 
7L, 8L, 13L, 14L, 6L, 10L, 9L, 10L, 12L, 5L, 15L, 14L, 6L, 14L, 
12L, 13L, 9L, 7L, 9L, 11L, 14L, 8L, 10L, 8L, 10L, 13L, 13L, 13L, 
6L, 8L, 5L, 5L, 6L, 6L, 11L, 7L, 6L, 9L, 8L, 5L, 6L, 7L, 9L, 
5L, 9L, 12L, 10L, 11L, 10L, 6L, 5L, 11L, 9L, 9L, 10L, 7L, 10L, 
13L, 8L, 7L, 8L, 15L, 8L, 13L, 11L, 12L, 14L, 11L, 6L, 9L, 14L, 
15L, 9L, 14L, 15L, 10L, 8L, 11L, 13L, 6L, 6L, 9L, 10L, 6L, 7L, 
15L, 14L, 8L, 10L, 9L, 12L, 5L, 12L, 10L, 10L, 14L, 10L, 8L, 
14L, 7L, 10L, 12L, 12L, 15L, 14L, 10L, 9L, 14L, 10L, 7L, 9L, 
11L, 7L, 14L, 10L, 10L, 13L, 9L, 6L, 13L, 7L, 13L, 6L, 10L, 10L, 
14L, 9L, 11L, 14L, 6L, 6L, 12L, 8L, 6L, 6L, 5L, 6L, 15L, 9L, 
12L, 14L, 14L, 9L, 8L, 10L, 10L, 11L, 12L, 15L, 6L, 5L, 13L, 
6L, 7L, 7L, 11L, 11L, 7L, 15L, 9L, 6L, 10L, 14L, 6L, 5L, 15L, 
10L, 13L, 13L, 9L, 11L, 6L, 14L, 14L, 9L, 5L, 8L, 11L, 13L, 8L, 
11L, 5L, 7L, 11L, 8L, 13L, 11L, 8L, 14L, 15L, 13L, 6L, 8L, 9L, 
14L, 8L, 14L, 13L, 10L, 5L, 5L, 5L, 10L, 9L, 14L, 8L, 6L, 14L, 
8L, 10L, 11L, 12L, 13L, 15L, 5L, 11L, 14L, 14L, 6L, 8L, 9L, 15L, 
10L, 6L, 5L, 5L, 9L, 10L, 9L, 15L, 8L, 10L, 5L, 6L, 5L, 13L, 
8L, 5L, 14L, 14L, 10L, 8L, 11L, 15L, 15L, 13L, 13L, 14L, 9L, 
11L, 8L, 13L, 9L, 13L, 9L, 8L, 5L, 7L, 13L, 7L, 5L, 11L, 15L, 
8L, 13L, 6L, 9L, 5L, 6L, 15L, 8L, 15L, 11L, 6L, 6L, 10L, 12L, 
10L, 9L, 10L, 5L, 10L, 6L, 12L, 14L, 12L, 6L, 9L, 14L, 13L, 12L, 
12L, 12L, 7L, 12L, 9L, 14L, 6L, 6L, 9L, 12L, 14L, 10L, 8L, 9L, 
9L, 7L, 11L, 5L, 12L, 14L, 11L, 15L, 12L, 11L, 5L, 6L, 10L, 9L, 
7L, 12L, 13L, 11L, 9L, 6L, 6L, 14L, 5L, 8L, 11L, 7L, 12L, 8L, 
11L, 12L, 10L, 6L, 13L, 15L, 8L, 12L, 13L, 15L, 13L, 6L, 6L, 
11L, 14L, 13L, 13L, 6L, 6L, 14L, 14L, 11L), lm = c(3L, 4L, 1L, 
3L, 4L, 2L, 3L, 1L, 1L, 4L, 2L, 3L, 3L, 1L, 2L, 3L, 1L, 4L, 4L, 
1L, 3L, 1L, 4L, 3L, 1L, 4L, 3L, 2L, 4L, 4L, 3L, 2L, 2L, 2L, 2L, 
3L, 2L, 4L, 1L, 1L, 2L, 4L, 2L, 2L, 1L, 1L, 1L, 4L, 4L, 4L, 3L, 
4L, 1L, 2L, 1L, 4L, 2L, 3L, 1L, 3L, 2L, 1L, 3L, 2L, 1L, 4L, 1L, 
2L, 4L, 1L, 2L, 3L, 3L, 4L, 4L, 4L, 2L, 3L, 4L, 4L, 3L, 1L, 4L, 
3L, 3L, 4L, 1L, 4L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 4L, 4L, 
3L, 2L, 4L, 2L, 4L, 1L, 1L, 2L, 4L, 1L, 1L, 4L, 3L, 2L, 4L, 3L, 
4L, 2L, 4L, 3L, 3L, 4L, 2L, 4L, 1L, 1L, 2L, 1L, 2L, 3L, 3L, 1L, 
4L, 3L, 3L, 2L, 2L, 4L, 4L, 4L, 4L, 4L, 2L, 4L, 1L, 3L, 2L, 3L, 
1L, 3L, 3L, 2L, 4L, 1L, 1L, 2L, 1L, 2L, 2L, 1L, 3L, 1L, 3L, 3L, 
2L, 3L, 1L, 3L, 4L, 4L, 2L, 3L, 2L, 2L, 3L, 1L, 3L, 2L, 4L, 1L, 
4L, 2L, 4L, 1L, 3L, 2L, 1L, 4L, 3L, 1L, 3L, 4L, 4L, 1L, 3L, 2L, 
1L, 3L, 4L, 1L, 1L, 4L, 1L, 4L, 4L, 1L, 2L, 2L, 3L, 3L, 3L, 1L, 
2L, 4L, 2L, 4L, 1L, 2L, 3L, 4L, 4L, 4L, 1L, 2L, 3L, 4L, 1L, 3L, 
1L, 4L, 2L, 3L, 4L, 4L, 3L, 3L, 4L, 1L, 2L, 1L, 3L, 2L, 4L, 3L, 
4L, 1L, 2L, 2L, 4L, 1L, 4L, 3L, 3L, 4L, 3L, 2L, 4L, 4L, 4L, 1L, 
1L, 3L, 1L, 2L, 3L, 2L, 2L, 3L, 4L, 4L, 1L, 2L, 4L, 3L, 1L, 3L, 
3L, 2L, 4L, 3L, 1L, 1L, 2L, 3L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 1L, 
2L, 1L, 2L, 4L, 2L, 4L, 4L, 2L, 1L, 3L, 4L, 3L, 1L, 4L, 4L, 4L, 
3L, 1L, 4L, 1L, 3L, 2L, 3L, 3L, 2L, 4L, 2L, 2L, 3L, 3L, 3L, 4L, 
4L, 4L, 4L, 2L, 4L, 3L, 1L, 4L, 2L, 3L, 3L, 3L, 2L, 1L, 1L, 1L, 
3L, 4L, 4L, 2L, 2L, 2L, 2L, 4L, 3L, 2L, 3L, 4L, 1L, 2L, 1L, 3L, 
4L, 4L, 3L, 2L, 3L, 4L, 3L, 2L, 4L, 1L, 1L, 2L, 3L, 3L, 3L, 1L, 
2L, 3L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 4L, 4L, 3L, 3L, 2L, 4L, 4L, 
1L, 2L, 4L, 3L, 2L, 1L, 3L, 4L, 2L, 1L, 3L, 4L, 3L, 4L, 1L, 2L, 
2L, 1L, 3L, 3L, 1L, 4L, 4L, 2L, 4L, 1L, 2L, 2L, 2L, 2L, 1L, 4L, 
4L, 1L, 3L, 3L, 2L, 3L, 2L, 3L, 1L, 3L, 2L, 2L, 4L, 1L, 3L, 1L, 
3L, 4L, 3L, 4L, 2L, 3L, 4L, 3L, 2L, 3L, 1L, 1L, 3L, 1L, 1L, 3L, 
2L, 1L, 2L, 4L, 4L, 1L, 2L, 3L, 3L, 2L, 4L, 2L, 3L, 4L, 2L, 4L, 
4L, 4L, 3L, 2L, 4L, 3L, 3L, 2L, 1L, 2L, 2L, 4L, 1L, 4L, 2L, 4L, 
4L, 4L, 1L, 2L, 4L, 1L, 2L, 3L, 2L, 2L, 2L, 3L, 4L, 2L, 3L, 1L, 
1L, 2L, 3L, 2L, 4L, 2L, 2L, 4L, 1L, 2L, 3L, 2L, 1L, 1L, 2L, 2L, 
2L, 1L, 2L, 1L, 3L, 3L, 3L, 3L, 2L, 4L, 3L, 4L, 3L, 3L, 2L, 1L, 
2L, 1L, 2L, 2L, 4L, 3L, 2L, 2L, 1L, 1L, 1L, 2L, 4L, 1L, 2L, 3L, 
2L, 4L, 4L, 2L, 2L, 3L, 2L, 3L, 2L, 2L, 1L, 3L, 4L, 4L, 1L, 2L, 
4L, 2L, 1L, 1L, 4L, 3L, 1L, 4L, 3L, 1L, 4L, 1L, 2L, 3L, 2L, 4L, 
4L, 4L, 2L, 3L, 1L, 4L, 1L, 1L, 1L, 1L, 3L, 3L, 2L, 3L, 4L, 1L, 
1L, 1L, 2L, 4L, 4L, 1L, 2L, 3L, 4L, 2L, 1L, 2L, 1L, 3L, 4L, 1L, 
4L, 2L, 4L, 3L, 1L, 1L, 2L, 3L, 1L, 1L, 1L, 2L, 3L, 2L, 4L, 4L, 
3L, 1L, 1L, 3L, 3L, 4L, 3L, 2L, 2L, 3L, 2L, 4L, 3L, 4L, 1L, 2L, 
1L, 3L, 2L, 3L, 2L, 3L, 4L, 3L, 2L, 3L, 3L, 2L, 3L, 3L, 4L, 1L, 
3L, 1L, 2L, 3L, 3L, 1L, 3L, 2L, 3L, 1L, 4L, 1L, 4L, 2L, 1L, 4L, 
2L, 2L, 1L, 4L, 3L, 2L, 3L, 4L, 3L, 4L, 2L, 3L, 2L, 1L, 2L, 2L, 
3L, 4L, 3L, 2L, 4L, 4L, 2L, 2L, 1L, 4L, 1L, 3L, 4L, 2L, 2L, 1L, 
4L, 1L, 3L, 2L, 4L, 1L, 1L, 3L, 3L, 3L, 1L, 2L, 2L, 2L, 1L, 3L, 
4L, 1L, 2L, 1L, 4L, 1L, 2L, 4L, 1L, 4L, 1L, 3L, 1L, 1L, 4L, 2L, 
3L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 3L, 2L, 1L, 4L, 2L, 3L, 4L, 1L, 
4L, 4L, 2L, 1L, 4L, 1L, 3L, 2L, 4L, 1L, 4L, 3L, 4L, 4L, 4L, 2L, 
1L, 2L, 2L, 1L, 1L, 3L, 1L, 4L, 3L)), class = "data.frame", row.names = c(NA, 
-780L))

獲得它的一種方法是進行“范圍連接”(又名“非對等”連接)。 這通常在data.tablefuzzyjoin和 SQL 中受支持(可以使用sqldf在本機 R 中sqldf )。

數據表

library(data.table)
setDT(A)
setDT(B)
B[A, on = .(farmID == farmID, start <= date, end >= date)
  ][, ip := fcoalesce(ip, i.ip)
    ][, lm := fcoalesce(lm, i.lm)
      ][, c("i.ip", "i.lm") := NULL ][]
#    farmID start end ip  lm
# 1:    F10   146 146 15 0.8
# 2:    F10   147 147 15 0.8
# 3:    F10   148 148  6 0.6
# 4:    F10   149 149  8 0.1
# 5:    F11   146 146 13 0.9
# 6:    F11   146 146 20 0.7
# 7:    F11   147 147 20 0.7
# 8:    F11   148 148 20 0.7
# 9:    F11   149 149 20 0.7

模糊連接

(從data.frame s 開始,而不是data.table s)

library(fuzzyjoin)
out <- fuzzy_left_join(
  A, B,
  by = c(farmID = "farmID", date = "start", date = "end"),
  match_fun = list(`==`, `>=`, `<=`)
)
within(out, {
  farmID = farmID.x
  ip = ifelse(is.na(ip.y), ip.x, ip.y)
  lm = ifelse(is.na(lm.y), lm.x, lm.y)
  # remove side-specific versions of variables
  farmID.x <- farmID.y <- ip.x <- ip.y <- lm.x <- lm.y <- NULL
  # remove B$start/$end, not needed
  start <- end <- NULL
})
#   date  lm ip farmID
# 1  146 0.8 15    F10
# 2  147 0.8 15    F10
# 3  148 0.6  6    F10
# 4  149 0.1  8    F10
# 5  146 0.9 13    F11
# 6  146 0.7 20    F11
# 7  147 0.7 20    F11
# 8  148 0.7 20    F11
# 9  149 0.7 20    F11

SQL

如果數據在加載之前已經在SQL DBMS中,那么最好讓SQL服務器自己做這一步……如果沒有,你可以使用sqldf為你做。

sqldf::sqldf(
  "select A.date, A.farmID,
     coalesce(B.ip, A.ip) as ip, coalesce(B.lm, A.lm) as lm
   from A left join B
     on A.farmID = b.farmID
     and A.date between B.start and B.end"
)
#   date farmID ip  lm
# 1  146    F10 15 0.8
# 2  147    F10 15 0.8
# 3  148    F10  6 0.6
# 4  149    F10  8 0.1
# 5  146    F11 13 0.9
# 6  146    F11 20 0.7
# 7  147    F11 20 0.7
# 8  148    F11 20 0.7
# 9  149    F11 20 0.7

我在你的大數據編輯之前制定了這個答案,而是使用這些數據:

A <- structure(list(date = c(146L, 147L, 148L, 149L, 146L, 147L, 148L, 149L), farmID = c("F10", "F10", "F10", "F10", "F11", "F11", "F11", "F11"), ip = c(10L, 11L, 6L, 8L, 10L, 12L, 4L, 5L), lm = c(0.5, 0.6, 0.6, 0.1, 0.4, 0.3, 0.5, 0.3)), row.names = c(NA, -8L), class = "data.frame")
B <- structure(list(farmID = c("F10", "F10", "F11", "F11"), start = c(140L, 140L, 145L, 146L), end = c(145L, 147L, 146L, 149L), ip = c(3L, 15L, 13L, 20L), lm = c(0.4, 0.8, 0.9, 0.7)), row.names = c(NA, -4L), class = "data.frame")

暫無
暫無

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

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