r - 根据R中字符串中不同位置的不同条件进行过滤

标签 r regex string filter

字符串的中间部分是 ID,我希望每个 ID 只出现一次。如果有多个观察值具有相同的六个中间字母,我需要保留一个写着“07”而不是“08”或“A”而不是“B”的观察结果。如果数字是“02”,我想完全排除。除此之外,如果只出现一次 ID,我想保留它。所以如果我有:

col1                       
ID-1-AMBCFG-07A-01
ID-1-CGUMBD-08A-01
ID-1-XDUMNG-07B-01
ID-1-XDUMNG-08B-01
ID-1-LOFBUM-02A-01
ID-1-ABYEMJ-08A-01  
ID-1-ABYEMJ-08B-01    

那我想要:

col1
ID-1-AMBCFG-07A-01
ID-1-CGUMBD-08A-01
ID-1-XDUMNG-07B-01
ID-1-ABYEMJ-08A-01  

我在想也许我可以使用 group_by 来指定 6 个字母的 ID,然后使用某种 if_else 语句?但我不知道如何指定字符串中字符的位置。非常感谢任何帮助!

最佳答案

使用 extract 和一些 dplyr 争吵:

library(tidyr)
library(dplyr)
df %>% 
  extract(col1, "ID-\\d-(.*)-(\\d*)(A|B)-01",
          into = c("ID", "number", "letter"),
          remove = FALSE, convert = TRUE) %>% 
  group_by(ID) %>% 
  filter(number != 2) %>% 
  slice_min(n = 1, order(number, letter)) %>%
  ungroup() %>% 
  select(col1)

#                col1                        
#1 ID-1-ABYEMJ-08A-01
#2 ID-1-AMBCFG-07A-01
#3 ID-1-CGUMBD-08A-01
#4 ID-1-XDUMNG-07B-01

关于r - 根据R中字符串中不同位置的不同条件进行过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74099309/

相关文章:

C:重新分配字符串数组

在 R 中重新排列数据框中的信息

r - 自动调整 ggplot 中条的大小以在多个图形 R 中保持均匀性

r - 将具有数字和普通数字向量的字符矩阵转换为数字

regex - 从 Ansible 中的变量中提取子字符串

java - 如何为字符串做 !=

string - Apache Commons lang StrTokenizer

R:将非对称列表转换为矩阵 - 每个子列表中的元素数量不同

java - 摆脱逗号

regex - 打印以偶数开头的行