在R中使用dplyr或tidyverse映射多个列

在R中使用dplyr或tidyverse映射多个列,r,dplyr,tidyverse,R,Dplyr,Tidyverse,我的数据与以下数据相似。注意我在这里没有提到的两个姓氏或名字 df1 首先,我将stringsAsFactors=FALSE设置到您的代码中,以生成数据,从而避免以后的痛苦 df1<-read.table(text= "id Surname Name 1234 Hamidsar Smith 139 Sandarscom Vicky 234 Bates May 100 Murphu Beki 941 Jool Susan 469 Sali John 99

我的数据与以下数据相似。注意我在这里没有提到的两个姓氏或名字

df1
首先,我将
stringsAsFactors=FALSE
设置到您的代码中,以生成数据,从而避免以后的痛苦

  df1<-read.table(text= "id Surname Name
1234    Hamidsar    Smith
139 Sandarscom  Vicky
234 Bates   May
100 Murphu  Beki
941 Jool    Susan
469 Sali    John
990 susai   Alison",header=TRUE, stringsAsFactors=FALSE)

  df2<-read.table(text= "id Surname Name
990 susai   Anis
81B Rosak   Roy
340 Molipoor    Vicky
139 Bates   May
941 Ameri   David
990 susai   Alison
139 Bates   May
101 CICI    Beki
139 Sandarscom  Vicky
1234    Hamidsar    Smith",header=TRUE, stringsAsFactors=FALSE)
首先,我将
stringsAsFactors=FALSE
设置到您的代码中,以生成数据,从而避免以后的痛苦

  df1<-read.table(text= "id Surname Name
1234    Hamidsar    Smith
139 Sandarscom  Vicky
234 Bates   May
100 Murphu  Beki
941 Jool    Susan
469 Sali    John
990 susai   Alison",header=TRUE, stringsAsFactors=FALSE)

  df2<-read.table(text= "id Surname Name
990 susai   Anis
81B Rosak   Roy
340 Molipoor    Vicky
139 Bates   May
941 Ameri   David
990 susai   Alison
139 Bates   May
101 CICI    Beki
139 Sandarscom  Vicky
1234    Hamidsar    Smith",header=TRUE, stringsAsFactors=FALSE)

这回答了你的问题吗?没错,您的预期输出不是联接的结果。我现在读得更仔细了,但我根本无法理解你的预期产出。你能解释一下这是什么意思吗?我还是不明白。susai Alison在两个数据框中的id、姓氏和姓名都匹配,那么姓氏只在这种情况下出现的逻辑是什么呢?好的。。那么名字不出现的逻辑是什么呢?不-990 susai Alison出现在两个数据帧中,但您只希望为该案例提供id和姓氏,而不是名称。为什么?这回答了你的问题吗?没错,您的预期输出不是联接的结果。我现在读得更仔细了,但我根本无法理解你的预期产出。你能解释一下这是什么意思吗?我还是不明白。susai Alison在两个数据框中的id、姓氏和姓名都匹配,那么姓氏只在这种情况下出现的逻辑是什么呢?好的。。那么名字不出现的逻辑是什么呢?不-990 susai Alison出现在两个数据帧中,但您只希望为该案例提供id和姓氏,而不是名称。为什么?谢谢你,菲尔,谢谢你,菲尔。
  df1 %>% 
    mutate(id = as.character(id),
           Map_id = if_else(id %in% df2$id, "id", NA_character_),
           Map_Surname = if_else(Surname %in% df2$Surname, "Surname", NA_character_),
           Map_Name = if_else(Name %in% df2$Name, "Name", NA_character_),
           Map = glue("{Map_id} {Map_Surname} {Map_Name}", .na = "") %>% 
             str_trim() %>% 
             str_replace_all(" ", ", ")) %>% 
    select(id, Surname, Name, Map)

#>     id    Surname   Name               Map
#> 1 1234   Hamidsar  Smith id, Surname, Name
#> 2  139 Sandarscom  Vicky id, Surname, Name
#> 3  234      Bates    May     Surname, Name
#> 4  100     Murphu   Beki              Name
#> 5  941       Jool  Susan                id
#> 6  469       Sali   John                  
#> 7  990      susai Alison id, Surname, Name