r - 从R中的模式中提取单个唯一字符
问题描述
我有一个独特的字符向量的数据框,它们都与不同的模式非常相似,但每个都有很小的偏差。我希望找到一种方法来识别每个字符串中的偏差。这是我尝试过的:
library(stringr)
#The strings are concatenated in my code, I separated them for easier use
KeyPattern <- c('abcd'
uniqchars <- function(x) unique(strsplit(x, "")[[1]])
KayPattern <- uniqchars(KeyPattern)
> KeyPattern
[1] "a" "b" "c" "d"
SampleString <- c('a', 'b', 'z', 'c', 'd')
str_detect(SampleString, KeyPattern)
[1] TRUE TRUE FALSE FALSE FALSE
如您所见,它识别了“z”字符,并正确返回 FALSE,从那里模式完全关闭。我也考虑过尝试:
word(string, start = 1L, end = start, sep = fixed(" "))
但这需要预先知道偏差在哪里(开始 = ...,结束 = ...),并且在数据帧的每一行中都会有所不同。
最终,我想要一个数据框,其中包含一列唯一字符串、一列不同偏差(模式中的不匹配),以及它在字符串中的位置。
目标样本表:
细绳 | 偏离键 | 偏差起始位置 |
---|---|---|
'a' 'b' 'c' 'z' 'd' | z | 4 |
'a' 'b' 'a' 'c' 'd' | 一个 | 3 |
当前连接的数据框:
1 ASGGGGSAASHLIALQLRLIGDAFDGGGGSGGGGSG
2 ASLTVDVGNVTYHFNNPITVLVFAILVALELGGTVHVHGNRIHVEG
3 ASLTVHVGDLTYHFENPQLVKLVAEIWARALNLTIEIRGNEIHVEG
4 ASNELVELVVEILYRMCVDPDQIKKILKRRGVSDEEVKRAIDKAIG
5 ASNMNMLEALQQRLQFYFGVVSRAALENNSGKARRFGRIVKQYEDAIKLYKAGKPVPYDELPVPPGFGG
6 ASNTIMLEALQQRLQFYFGVVSRAALENNSGKARRFGRIVKQYEDAIKLYKAGKPVPYDELPVPPGFGG
#CurrentKey
[1] "ASSTNMLEALQQRLQFYFGVVSRALENNSGKARRFGRIVKQYEDAIKLYKAGKPVPYDELPVPPGFGG"
有什么建议么?
解决方案
看看这是不是你想要的?
df <- structure(list(STRINGS = list(c("a", "b", "c", "z", "d"), c("a",
"b", "a", "c", "d"))), class = "data.frame", row.names = c(NA,
-2L))
df
#> STRINGS
#> 1 a, b, c, z, d
#> 2 a, b, a, c, d
pattern <- c('a', 'b', 'c', 'd')
library(tidyverse)
df %>%
mutate(deviation = map_chr(STRINGS, ~ {x <- cumsum(.x[seq_along(pattern)] != pattern); .x[which(x >0)[1]]}),
deviation_start_loc = map_int(STRINGS, ~ {x <- cumsum(.x[seq_along(pattern)] != pattern); which(x > 0)[1]}))
#> STRINGS deviation deviation_start_loc
#> 1 a, b, c, z, d z 4
#> 2 a, b, a, c, d a 3
由reprex 包于 2021-06-21 创建 (v2.0.0 )
推荐阅读
- android - 我能知道输入变量为什么它总是给我错误,非常感谢
- java - 用户输入值后在 Java 中循环
- amazon-web-services - 当 AWS Glue 工作流程完成时,是否可以发布到 SNS?
- javascript - 类似数组/映射的数据结构,具有对项目的唯一 ID 支持、O(1) get() 方法且无重复
- python - 卸载 Python3.8 ,我会丢失所有已安装的软件包吗?
- java - 将日期转换为 LocalDateTime,格式为“yyyy-MM-dd HH:mm:ssXXX”
- c - 如何将具有未知小数的浮点数转换为整数而不会丢失数据?
- python - Selenium Python - 元素拦截错误
- django - Elastic Beanstalk - 从自定义域浏览站点时 - DNS_PROBE_FINISHED_NXDOMAIN
- powerbi - Power BI 动态 csv 文件路径更改