在R中生成唯一子字符串表

时间:2019-11-26 13:11:01

标签: r unique substr

因此,我有一个非常大的数据集,我想知道一列具有约40万观察值的唯一值,每个观察值看起来都像这样: identifier:abzcd:def:RANDOMNUMBERSTRINGidentifier:de:ghijklm:RANDOMNUMBERSTRING。 我只希望随机数字符串之前的部分具有唯一匹配项。换句话说,我只想过滤出以下代码的重复项:identifier:LETTERS:LETTERS unique函数不起作用,似乎我需要确切地知道我要过滤的子字符串或使用substr函数的子字符串要多长时间。关于如何执行此操作的任何建议?

以下是一些可用作模型的数据:

randz <- data.frame(id =
                      sprintf("identifier:%s%s%s:%s%s%s:%s",
                 sample(letters, 1000,replace = T ),
                 sample(letters, 1000,replace = T ),
                 sample(letters, 1000,replace = T ),
                 sample(letters, 1000,replace = T ),
                 sample(letters, 1000,replace = T ),
                 sample(letters, 1000,replace = T ),
                 sample(6000:7000, 1000, replace = T )))
randz

1 个答案:

答案 0 :(得分:1)

这是使用tidyverse

的一种简单方法
# Fake Data
randz <- data.frame(id =
                      sprintf("identifier:%s%s%s:%s%s%s:%s",
                 sample(letters, 1000,replace = T ),
                 sample(letters, 1000,replace = T ),
                 sample(letters, 1000,replace = T ),
                 sample(letters, 1000,replace = T ),
                 sample(letters, 1000,replace = T ),
                 sample(letters, 1000,replace = T ),
                 sample(6000:7000, 1000, replace = T )))

在这里,我将使用str_remove函数使用“ $”表示最后一个冒号(:)后的数字(\ d +),以指示字符串的结尾。 Count还将拉出每个唯一值,并且列“ n”将指示它将出现多少次。


# Libraries
library(tidyverse)
randz %>% 
  mutate(out = str_remove(string = id,
                           pattern = ":\\d+$")) %>% 
  count(out,sort = TRUE)

输出:

A tibble: 1,000 x 2
   out                    n
   <chr>              <int>
 1 identifier:aar:muk     1
 2 identifier:abe:tlo     1
 3 identifier:abg:qux     1
 4 identifier:abh:bxx     1
 5 identifier:abl:vdj     1