因此,我有一个非常大的数据集,我想知道一列具有约40万观察值的唯一值,每个观察值看起来都像这样:
identifier:abzcd:def:RANDOMNUMBERSTRING
和identifier: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
答案 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