【问题标题】:Joining on incorrect data using dplyr使用 dplyr 加入不正确的数据
【发布时间】:2020-10-20 18:18:18
【问题描述】:

所以我有一个这样的查找表:

ID Descrip
11 Apples
12 Bananas
13 Grapes
14 Cherries

但是我的数据看起来像这样:

col
11
13
11
12
12
Apples
Cherries
Bananas
Ba_nanas
14

所以我想将col 与查找匹配并拥有如下数据:

col    Descrip
11     Apples
13     Grapes
11     Apples
12     Bananas
12     Bananas
11     Apples
14     Cherries
12     Bananas
NA     NA
14     Cherries

所以要注意,如果两者都不匹配,则两者都应该被清空,例如Ba_nanas

我尝试了以下方法并且它有效,但仅在一个方向上.....

df <- df %>%
  mutate(col = ifelse(nchar(col)>2, NA ,col))
  left_join(lookup, by =c("col" = "ID"))

如果可能的话,我真的很想坚持在nchar &gt; 2 时更换。

【问题讨论】:

    标签: r dplyr tidyverse


    【解决方案1】:

    试试这个方法。您可以设置此base R 方法以进行双重匹配,然后根据结果条件使用ifelse() 提取所需的值。这里是代码(使用您共享的数据进行第一次测试):

    #Code format vars
    df$col1 <- as.numeric(df$col)
    Keys$ID <- as.character(Keys$ID)
    #Match
    df$M1 <- Keys[match(df$col,Keys$ID),"Descrip"]
    df$M2 <- Keys[match(df$col,Keys$Descrip),"ID"]
    #Format new vars
    df$Var <- ifelse(!is.na(df$M1),df$M1,
                     ifelse(!is.na(df$M2),df$col,NA))
    df$id <- ifelse(!is.na(df$col1),df$col1,
                    ifelse(!is.na(df$M2),df$M2,NA))
    #Select
    df2 <- df[,c('id','Var')]
    

    输出:

         id      Var
    1    11   Apples
    2    13   Grapes
    3    11   Apples
    4    12  Bananas
    5    12  Bananas
    6    11   Apples
    7    14 Cherries
    8    12  Bananas
    9  <NA>     <NA>
    10   14 Cherries
    

    使用的一些数据:

    #Data 1
    df <- structure(list(col = c("11", "13", "11", "12", "12", "Apples", 
    "Cherries", "Bananas", "Ba_nanas", "14")), class = "data.frame", row.names = c(NA, 
    -10L))
    
    #Data 2
    Keys <- structure(list(ID = c("11", "12", "13", "14"), Descrip = c("Apples", 
    "Bananas", "Grapes", "Cherries")), row.names = c(NA, -4L), class = "data.frame")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-04-13
      • 1970-01-01
      • 2014-11-09
      • 2021-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多