从两个独立的数据库中根据多个条件选择行

用户13538376

我有两个独立的两个数据集,一个包含事件日期。每个 ID 只有一个“事件日期”。如下:

data1 <- data.frame("ID" = c(1,2,3,4,5,6), "Eventdate" = c("2019-01-01", "2019-02-01", "2019-03-01", "2019-04-01", "2019-05-01", "2019-06-01"))
data1
  ID  Eventdate
1  1 2019-01-01
2  2 2019-02-01
3  3 2019-03-01
4  4 2019-04-01
5  5 2019-05-01
6  6 2019-06-01

在另一个数据集中,一个 ID 有多个事件名称(Eventcode)及其事件日期(Eventdate)。如下:

data2 <- data.frame("ID" = c(1,1,2,3,3,3,4,4,7), "Eventcode"=c(201,202,201,204,205,206,209,208,203),"Eventdate" = c("2019-01-01", "2019-01-01", "2019-02-11", "2019-02-15", "2019-03-01", "2019-03-15", "2019-03-10", "2019-03-20", "2019-06-02"))
data2
  ID Eventcode  Eventdate
1  1       201 2019-01-01
2  1       202 2019-01-01
3  2       201 2019-02-11
4  3       204 2019-02-15
5  3       205 2019-03-01
6  3       206 2019-03-15
7  4       209 2019-03-10
8  4       208 2019-03-20
9  7       203 2019-06-02

两个数据集通过 ID 链接。两个数据集的 ID 并不完全相同。我想在 data2 中选择具有条件的案例:

  1. 按 ID 匹配
  2. 数据 2 中的事件日期 >= 数据 1 中的事件日期。
  3. 如果一个ID在data2中有多个Eventdate,则选择最早的一个。
  4. 如果一个ID在data2中的一个Eventdate有多个Eventcode,就随机选择一个。

然后将选中的data2合并到data1中。

预期结果如下:

data1
  ID  Eventdate Eventdate.data2 Eventcode
1  1 2019-01-01      2019-01-01       201
2  2 2019-02-01      2019-02-11       201
3  3 2019-03-01      2019-03-01       205
4  4 2019-04-01                          
5  5 2019-05-01                          
6  6 2019-06-01 

要么

data1
  ID  Eventdate Eventdate.data2 Eventcode
1  1 2019-01-01      2019-01-01       202
2  2 2019-02-01      2019-02-11       201
3  3 2019-03-01      2019-03-01       205
4  4 2019-04-01                          
5  5 2019-05-01                          
6  6 2019-06-01 

非常非常感谢你!

罗纳克·沙阿

你可以试试这个方法:

library(dplyr)

left_join(data1, data2, by = 'ID') %>%
  group_by(ID, Eventdate.x) %>%
  summarise(Eventdate = Eventdate.y[Eventdate.y >= Eventdate.x][1], 
            Eventcode = {
              inds <- Eventdate.y >= Eventdate.x
              val <- sum(inds, na.rm = TRUE)
              if(val == 1) Eventcode[inds]
              else if(val > 1) sample(Eventcode[inds], 1)
              else NA_real_
              })

#    ID Eventdate.x Eventdate  Eventcode
#  <dbl> <chr>       <chr>          <dbl>
#1     1 2019-01-01  2019-01-01       201
#2     2 2019-02-01  2019-02-11       201
#3     3 2019-03-01  2019-03-01       205
#4     4 2019-04-01  NA                NA
#5     5 2019-05-01  NA                NA
#6     6 2019-06-01  NA                NA

Eventcode数据中的复杂逻辑是为了随机性,如果您可以选择第一个值,就像Eventdate您可以将其简化为:

left_join(data1, data2, by = 'ID') %>%
  group_by(ID, Eventdate.x) %>%
  summarise(Eventdate = Eventdate.y[Eventdate.y >= Eventdate.x][1], 
            Eventcode = Eventcode[Eventdate.y >= Eventdate.x][1])

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

根据多个条件连接两个熊猫数据框

根据Pandas Python中的两个条件选择数据框的行

将数据库中的DateTime列分隔为RadGrid的两个独立列

根据两个单独表中的条件从一个表中选择行

实体框架从数据库实体中分离出两个独立的数据列表

如何在两个没有子查询的独立数据库中读取类的双重注册?的SQL

从R中的两个独立数据库计算每个重叠日期范围

SwiftUI-从数据库中随机选择两个值

根据多个行条件比较两个不同的数据帧

根据条件从两个数据框中合并并选择行

从NoSQL数据库中的两个(或多个)模式查询数据的最佳实践

根据Excel中的两个或多个条件插入行

无法输出数据库中与两个选择选项相关的行

根据两个日期从数据库获取数据

在两个不同的mysql数据库中的两个表之间复制大量行

结合两个forloop在同一行中获取数据库值

根据数据库中的两个表显示下拉选择的值

在Firebase数据库中搜索两个条件

根据多个选择条件匹配的两个不同数据框中的行构建第三个数据框

使用 Python 分析两个 SQL 数据库之间的多个表中的数据

在数据库中插入两个 ID

如何使用多个条件(可能为空)从数据库中优雅地选择行?

在访问数据库中的两个日期时间选择器之间搜索

结合两个选择语句从数据库中获取数据

使用两个输入从 C# 中的数据库中选择数据

如何获得两个独立数据库中行数之间的百分比?

根据 PySpark 中的两个不同行,选择数据框中的行,其中 ID 必须具有两个条件

如何动态调用具有两个条件的 SQLite 数据库中的数据?

根据两个单独的表和数据库中的条件选择列名