条件匹配时从另一行填充值

问题描述 投票:0回答:1

我正在尝试解决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
r dplyr
1个回答
1
投票

几个连接应该起作用:

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提醒我他们遇到的日期。 ^ _ ^

© www.soinside.com 2019 - 2024. All rights reserved.