Конкатенация 2 столбцов chr, если содержание col2 отсутствует в col1 - PullRequest
1 голос
/ 03 марта 2020

Рассмотрим следующую таблицу:

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

Я хотел бы объединить col1 и col2, если содержимое 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

Ответы [ 2 ]

1 голос
/ 03 марта 2020

Вы можете попробовать использовать 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
0 голосов
/ 03 марта 2020

вы можете попробовать это, но я не уверен, что оно удовлетворяет другому условию,

tdf %>% 
  mutate(col3 = if_else(
    col1 %in% col2,
    col1,
    paste(col1, col2)
  ))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...