首页 > 解决方案 > 识别部分字符串匹配

问题描述

我在 df 中有一个列,其值如下:

索赔编号 [![在此处输入图片描述][1]][1]

等等..

我想用粗体标识所有值,即列中在下划线之后有任何字符并且同时出现时没有下划线的所有值。我尝试使用 gsub 在单独的数据框中获取值列表,但这仍然不能解决问题。任何帮助将不胜感激!

标签: r

解决方案


基础 R 解决方案:

首先删除下划线后的所有内容,以便我们可以比较相似的字符串。

x <- c('92030534-12835', '92030534-12835_2', '92030534-12835_3', '13212854-14382', '13668582-14232', '93265773-15302', '93265773-15302_2')
df <- data.frame(x)
df$y <- sub('_.*', '', df$x)
df
#                 x              y
#1   92030534-12835 92030534-12835
#2 92030534-12835_2 92030534-12835
#3 92030534-12835_3 92030534-12835
#4   13212854-14382 13212854-14382
#5   13668582-14232 13668582-14232
#6   93265773-15302 93265773-15302
#7 93265773-15302_2 93265773-15302

使用duplicated将识别所有重复的字符串。

duplicated(df$y) | duplicated(df$y, fromLast = TRUE)
[1]  TRUE  TRUE  TRUE FALSE FALSE  TRUE  TRUE

然后,您可以对这些行进行子集化。

df[duplicated(df$y) | duplicated(df$y, fromLast = TRUE), ]

#                 x              y
#1   92030534-12835 92030534-12835
#2 92030534-12835_2 92030534-12835
#3 92030534-12835_3 92030534-12835
#6   93265773-15302 93265773-15302
#7 93265773-15302_2 93265773-15302

或将它们添加为新列

df$z <- duplicated(df$y) | duplicated(df$y, fromLast = TRUE)

推荐阅读