首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >只有一对列的两列的Fuzzyjoin需要fuzzyjoin语法

只有一对列的两列的Fuzzyjoin需要fuzzyjoin语法
EN

Stack Overflow用户
提问于 2020-04-30 22:34:41
回答 1查看 66关注 0票数 1

我正在尝试inner_join两个数据帧,每个数据帧有三列。第一个数据框包含日期、变量名和预测值,而第二个数据框包含日期、变量名和实际值。我的连接的目的是通过日期和正确的天气变量名称将预测值与实际值进行匹配,以便进行精度分析。

我的第一个数据帧x如下

代码语言:javascript
复制
 x <- structure(list(Date = structure(c(1588060800, 1588060800, 1588060800, 
1588060800, 1588060800, 1588060800, 1588060800, 1588060800, 1588060800, 
1588060800, 1588060800, 1588060800), class = c("POSIXct", "POSIXt"
), tzone = "UTC"), wx_vars = c("Wx1_Temperature", "Wx1_Precipitation", 
"Wx1_CloudCover", "Wx1_DewPoint", "Wx1_WindSpeed", "Wx1_SolarRadiation", 
"Wx2_Temperature", "Wx2_Precipitation", "Wx2_CloudCover", "Wx2_DewPoint", 
"Wx2_WindSpeed", "Wx2_SolarRadiation"), wx_forecast = c(56.92, 
0.0046, 77.46, 50.26, 7.42, 12.93, 57.05, 0.0037, 68.3, 50.5, 
7.32, 19.02)), row.names = c(NA, 12L), class = "data.frame")

我的第二帧y如下:

代码语言:javascript
复制
y <- structure(list(Date = structure(c(1588057200, 1588057200, 1588057200, 
1588057200, 1588060800, 1588060800, 1588060800, 1588060800, 1588060800, 
1588060800, 1588064400, 1588064400), class = c("POSIXct", "POSIXt"
), tzone = "UTC"), wx_vars = c("Actual_CloudCover", "Actual_WindSpeed", 
"Actual_Precipitation", "Actual_SolarRadiation", "Actual_Temperature", 
"Actual_DewPoint", "Actual_CloudCover", "Actual_WindSpeed", "Actual_Precipitation", 
"Actual_SolarRadiation", "Actual_Temperature", "Actual_DewPoint"
), wx_actuals = c(54.8, 5.63, 0, 26.1, 57.32, 49.99, 61, 7.24, 
0.00015, 23.4, 59.84, 52.11)), class = c("tbl_df", "tbl", "data.frame"
), row.names = c(NA, -12L))

如您所见,x预测日期框有两个独立的天气预报,我想评估它们的准确性: Wx1和Wx2。每一行都在Wx1或Wx2之后列出了不同的天气变量,它们与数据框y中的实际数据完全一致。日期在x和y中的格式是相同的,并且可以在简单的inner_join中工作,但是考虑到数据框x和y的wx_vars列中的字符串差异,我一直在尝试使用fuzzyjoin。还没找到。

这是我尝试过的,我最大的问题是我的问题标题是什么。我还没有在两个列上找到一个模糊连接的例子,其中一个列匹配可以在常规连接中工作,而另一个列匹配需要模糊连接,在我的例子中是部分字符串匹配。

代码语言:javascript
复制
wx_analysis_1<- fuzzy_inner_join(x, y, by = c("Date", "wx_vars"="wx_vars"), match_fun = str_detect)
wx_analysis_2 <- regex_inner_join(x, y, by = c("Date", "wx_vars"="wx_vars"))

这两个解决方案中的任何一个都没有成功。我是否缺少一些语法来更好地处理date join?我觉得wx_vars的fuzzy_inner_join应该可以工作,但是Date列可能是我的问题。

谢谢

EN

回答 1

Stack Overflow用户

发布于 2020-05-01 03:55:59

由于您知道列应该匹配的规则,因此显式使用这些规则会更容易:

代码语言:javascript
复制
x <- x %>% 
  separate(wx_vars, c("type_wx", "wx_vars"), "_")

y <- y %>% 
  separate(wx_vars, c("type", "wx_vars"), "_")


x %>% 
  inner_join(y, by = c("Date", "wx_vars"))

#                   Date type_wx        wx_vars wx_forecast   type wx_actuals
# 1  2020-04-28 08:00:00     Wx1    Temperature     56.9200 Actual   57.32000
# 2  2020-04-28 08:00:00     Wx1  Precipitation      0.0046 Actual    0.00015
# 3  2020-04-28 08:00:00     Wx1     CloudCover     77.4600 Actual   61.00000
# 4  2020-04-28 08:00:00     Wx1       DewPoint     50.2600 Actual   49.99000
# 5  2020-04-28 08:00:00     Wx1      WindSpeed      7.4200 Actual    7.24000
# 6  2020-04-28 08:00:00     Wx1 SolarRadiation     12.9300 Actual   23.40000
# 7  2020-04-28 08:00:00     Wx2    Temperature     57.0500 Actual   57.32000
# 8  2020-04-28 08:00:00     Wx2  Precipitation      0.0037 Actual    0.00015
# 9  2020-04-28 08:00:00     Wx2     CloudCover     68.3000 Actual   61.00000
# 10 2020-04-28 08:00:00     Wx2       DewPoint     50.5000 Actual   49.99000
# 11 2020-04-28 08:00:00     Wx2      WindSpeed      7.3200 Actual    7.24000
# 12 2020-04-28 08:00:00     Wx2 SolarRadiation     19.0200 Actual   23.40000
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61525890

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档