此代码几天前有效:
df<- tribble(
~ unique_id, ~event_type, ~ event_date,
'id_101', 'A_type_event', '2022-01-01',
'id_101', 'B_type_event', '2022-02-01',
'id_101', 'A_type_event', '2022-02-15',
'id_101', 'A_type_event', '2022-02-28',
'id_101', 'B_type_event', '2022-03-01',
'id_101', 'C_type_event', '2022-03-10',
'id_101', 'A_type_event', '2022-03-20',
'id_101', 'C_type_event', '2022-04-01'
)
left_join(
df %>% filter(event_type == "A_type_event"), # match A_type_event
df %>% filter(event_type == "C_type_event"), # with C_type_event
#join_by(event_date < event_date), # where A_type_event before C_type_event
join_by(unique_id, event_date < event_date), # ... and unique id matches
multiple = "first") # and just keep first match
Error code now is: Error in dplyr::common_by(): ! by must be a (named) character vector, list, or NULL for natural joins (not recommended in production code), not a <dplyr_join_by> object.
我在 rdrr.io 上测试了示例代码和另一个相关stack overflow question在同一主题上,它们都返回相同的错误。
知道如何修复代码吗?
最佳答案
不清楚问题中使用的版本。 join_by
是 dplyr
的开发版本。如果我们将开发版本安装为
devtools::install_github("tidyverse/dplyr")
library(dplyr)
> left_join(
+ df %>% filter(event_type == "A_type_event"), # match A_type_event
+ df %>% filter(event_type == "C_type_event"), # with C_type_event
+ #join_by(event_date < event_date), # where A_type_event before C_type_event
+ join_by(unique_id, event_date < event_date), # ... and unique id matches
+ multiple = "first")
# A tibble: 4 × 5
unique_id event_type.x event_date.x event_type.y event_date.y
<chr> <chr> <chr> <chr> <chr>
1 id_101 A_type_event 2022-01-01 C_type_event 2022-03-10
2 id_101 A_type_event 2022-02-15 C_type_event 2022-03-10
3 id_101 A_type_event 2022-02-28 C_type_event 2022-03-10
4 id_101 A_type_event 2022-03-20 C_type_event 2022-04-01
关于r - Dplyr 非等值连接不再接受 join_by 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74141591/