r - 检查列是否包含列表中的值并将该值分配给新列
问题描述
我有一个包含要查找的模式的列表。然后我有一个data.table,我想在其中查找值是否包含任何其他模式,然后将该值分配给一个新列:
library(data.table)
library(stringr)
base_patters <- c("pat1","pat2","pat3")
transformations <- data.table(mynames = c("HI_pat1_jo","A2_a4_pat1_LN","pat3_LN")
)
for( patt in base_patters){
transformations[stringr::str_detect(transformations[, mynames], patt), pattern := patt]
}
我已经用 for 循环解决了(如你所见),但我正在寻找一种更有效的方法来做到这一点。
解决方案
将它们粘贴base_patters
在一起并用于str_extract
提取mynames
.
library(data.table)
library(stringr)
transformations[,pattern := str_extract(mynames,str_c(base_patters,collapse = "|"))]
# mynames pattern
#1: HI_pat1_jo pat1
#2: A2_a4_pat1_LN pat1
#3: pat3_LN pat3
推荐阅读
- php - 使用 PHP 从 HEIC 照片中读取 EXIF 数据
- javascript - 为什么这个 forEach 循环嵌套?
- javascript - 在 HTML 网页上滚动播放 Lottie / Bodymovin 动画
- java - 如何使用动作监听器从按钮获取背景颜色
- gremlin - Gremlin:如何在同一条边上向后遍历
- python - 如何解决“ValueError:无法转换为 Excel”?(使用 Python 和 openpyxl)?
- reactjs - React nativ,aws-amplify 存储,获取 aws.cognito.identity-id
- javascript - 使用纯 Javascript 循环遍历元素
- python - Pyglet如何制作不同的正交投影?
- sql - 在表的同一行中查找不匹配值