首页 > 解决方案 > 如果 col2 的内容不在 col1 中,则连接 2 个 chr 列

问题描述

考虑下表:

library(tidyverse)
tdf <- tibble(
  col1 = c(
    "album L. abietis (Wiesb.) Abrom.",
    "abortivum (L.) Swartz abortivum",
    "acanthoclada DC."
  ),
  col2 = c(
    "abietis (Wiesb.) Abrom.",
    "abortivum",
    "acetoselloides (Balansa) Nijs"
  )
)

# # A tibble: 3 x 2
# col1                               col2                         
# <chr>                              <chr>                        
# 1 album L. abietis (Wiesb.) Abrom. abietis (Wiesb.) Abrom.      
# 2 abortivum (L.) Swartz abortivum  abortivum                    
# 3 acanthoclada DC.                 acetoselloides (Balansa) Nijs

我想连接col1col2如果内容col2不在col1. 我尝试了以下方法,但它不起作用:

tdf %>% 
  mutate(col3 = if_else(
    col1 %>% str_detect(col2),
    col1,
    paste(col1, col2)
  ))

# str_detect(tdf$col1, tdf$col2)
# [1] FALSE  TRUE FALSE

的预期输出col3如下:

col3
<chr>
1 album L. abietis (Wiesb.) Abrom.
2 abortivum (L.) Swartz abortivum
3 acanthoclada DC. acetoselloides (Balansa) Nijs

标签: rtidyverse

解决方案


您可以尝试使用str_detect()遵循标准排序规则的模式。

library(dplyr)
library(stringr)

tdf %>%
  mutate(col3 = if_else(str_detect(string = col1, pattern = coll(col2)), col1, str_c(col1, col2, sep = " ")))


# A tibble: 3 x 3
  col1                             col2                          col3                                         
  <chr>                            <chr>                         <chr>                                        
1 album L. abietis (Wiesb.) Abrom. abietis (Wiesb.) Abrom.       album L. abietis (Wiesb.) Abrom.             
2 abortivum (L.) Swartz abortivum  abortivum                     abortivum (L.) Swartz abortivum              
3 acanthoclada DC.                 acetoselloides (Balansa) Nijs acanthoclada DC. acetoselloides (Balansa) Nijs

推荐阅读