我正在尝试解决dplyr
中的以下问题。在表格中,找到人和日期的相同组合,但顺序相反。
例如:
人员A在2019年11月27日与人员B会面-然后应该在另一排人员B在同一日期与人A相遇。
[发生这种情况时,我希望在“ Value Traveling”上填充“ Value Local”。我想为此找到一个dplyr
解决方案。下面是一个示例:
library(tidyverse)
Person.Local <- c("A", "A", "A", "A", "A", "B", "B", "B", "B", "B")
Person.Travel <- c("C", "J", "K", "B", "I", "C", "K", "V", "A", "P")
Date <- c("2019-10-31", "2019-10-14", "2019-10-13", "2019-10-12", "2019-10-12", "2019-10-18", "2019-10-21", "2019-10-22", "2019-10-12", "2019-10-29")
Value.Local <- c(1,4,5,3,7,9,7,5,3,8)
db <- cbind(Person.Local, Date, Person.Travel, Value.Local) %>% as.data.frame()
db
几个连接应该起作用:
db %>% left_join(
db %>% semi_join(db,
by=c("Person.Local"="Person.Travel", # Added date
"Person.Travel"="Person.Local", "Date"="Date")) %>%
mutate(Value.Travel=Value.Local) %>%
select(-Value.Local),
by=c("Person.Local"="Person.Local", "Person.Travel"="Person.Travel", "Date"="Date"))
# A tibble: 10 x 5
Person.Local Date Person.Travel Value.Local Value.Travel
<chr> <chr> <chr> <dbl> <dbl>
1 A 2019-10-31 C 1 NA
2 A 2019-10-14 J 4 NA
3 A 2019-10-13 K 5 NA
4 A 2019-10-12 B 3 3
5 A 2019-10-12 I 7 NA
6 B 2019-10-18 C 9 NA
7 B 2019-10-21 K 7 NA
8 B 2019-10-22 V 5 NA
9 B 2019-10-12 A 3 3
10 B 2019-10-29 P 8 NA
顺便说一句,您应该创建这样的数据以防止有关因子水平的警告:
db <- tibble(Person.Local, Date, Person.Travel, Value.Local)
编辑:感谢Josedv提醒我他们遇到的日期。 ^ _ ^