r - 如果 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
我想连接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
解决方案
您可以尝试使用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
推荐阅读
- php - Laravel Passport - 客户端身份验证失败
- python - 更新主页上的值 - Kivy
- python - 在 Pytorch 中,如何使用 BoolTensor 蒙版在多个暗淡中切片张量?
- puppeteer - 我可以像使用请求发送一样使用 Puppeteer 发送有效负载吗?
- css - 为什么我的网站上的自定义字体不起作用
- java - Logcat 错误未正确显示
- java - 用我的自定义发布者挂起记录并保存 Hystrix 指标
- c++ - opencv 无法加载相机参数(DynamicLib::libraryload ....\opencv_videoio_gstreamer452_64d.dll)
- vue.js - 如何使用 markdown-it-vue 库的插件?
- pandas - ValueError:数据必须是一维的