在R中,根据与另一个表的匹配情况和日期小于另一个表的情况筛选一个表的行
我在R中有两个类似于以下内容的表格: df1 lat long date 1.1 2.3 12-4-70 3.3 7.3 5-5-80 1.1 2.3 7-2-90 df2 lat long date 1.1 2.3 6-12-82 3.3 2.4 6-10-83 8.4 7.3 8-19-88在R中,根据与另一个表的匹配情况和日期小于另一个表的情况筛选一个表的行,r,tidyverse,R,Tidyverse,我在R中有两个类似于以下内容的表格: df1 lat long date 1.1 2.3 12-4-70 3.3 7.3 5-5-80 1.1 2.3 7-2-90 df2 lat long date 1.1 2.3 6-12-82 3.3 2.4 6-10-83 8.4 7.3 8-19-88 这称为非等联接。您可以使用fuzzyjoin包对dplyr执行此操作: library(fuzzyjoin) library(lubridate) df1 <- df
这称为非等联接。您可以使用
fuzzyjoin
包对dplyr
执行此操作:
library(fuzzyjoin)
library(lubridate)
df1 <- df1 %>% mutate(date = mdy(date))
df2 <- df2 %>% mutate(date = mdy(date))
fuzzy_inner_join(df1, df2,
by = c("lat" = "lat", "long" = "long", "date" = "date"),
match_fun = list(`==`,`==`,`<`))
# A tibble: 1 x 6
lat.x long.x date.x lat.y long.y date.y
<dbl> <dbl> <date> <dbl> <dbl> <date>
1 1.1 2.3 1970-12-04 1.1 2.3 1982-06-12
库(fuzzyjoin)
图书馆(lubridate)
df1%突变(日期=mdy(日期))
df2%突变(日期=mdy(日期))
模糊内连接(df1,df2,
by=c(“lat”=“lat”,“long”=“long”,“date”=“date”),
match_fun=list(`==`,`==`,`这称为非相等联接。您可以使用fuzzyjoin
包对dplyr
执行此操作:
library(fuzzyjoin)
library(lubridate)
df1 <- df1 %>% mutate(date = mdy(date))
df2 <- df2 %>% mutate(date = mdy(date))
fuzzy_inner_join(df1, df2,
by = c("lat" = "lat", "long" = "long", "date" = "date"),
match_fun = list(`==`,`==`,`<`))
# A tibble: 1 x 6
lat.x long.x date.x lat.y long.y date.y
<dbl> <dbl> <date> <dbl> <dbl> <date>
1 1.1 2.3 1970-12-04 1.1 2.3 1982-06-12
库(fuzzyjoin)
图书馆(lubridate)
df1%突变(日期=mdy(日期))
df2%突变(日期=mdy(日期))
模糊内连接(df1,df2,
by=c(“lat”=“lat”,“long”=“long”,“date”=“date”),
match_-fun=list(`==`,`==`,`另一个选项是与数据的非相等联接。table
library(data.table)
setDT(df1)[, date := as.IDate(date, "%m-%d-%y")
setDT(df2)[, date := as.IDate(date, "%m-%d-%y")
df1[df2, on = .(lat, long, date < date)]
库(data.table)
setDT(df1)[,日期:=as.IDate(日期,%m-%d-%y”)
setDT(df2)[,日期:=as.IDate(日期,“%m-%d-%y”)
df1[df2,on=(横向,纵向,日期<日期)]
另一个选项是与数据的非等联接。表
library(data.table)
setDT(df1)[, date := as.IDate(date, "%m-%d-%y")
setDT(df2)[, date := as.IDate(date, "%m-%d-%y")
df1[df2, on = .(lat, long, date < date)]
库(data.table)
setDT(df1)[,日期:=as.IDate(日期,%m-%d-%y”)
setDT(df2)[,日期:=as.IDate(日期,“%m-%d-%y”)
df1[df2,on=(横向,纵向,日期<日期)]