В этом нет ничего действительно эффективного, но ... демонстрация на наборе данных diamonds
из библиотеки ggplot2
,
library(ggplot2)
unique(unlist(lapply(diamonds, function(x) unlist(strsplit(as.character(x), "")))))
# [1] "0" "." "2" "3" "1" "9" "4" "6" "5" "8" "7" "I" "d" "e" "a" "l" "P" "r" "m" "i" "u" "G" "o"
# [24] "V" "y" " " "F" "E" "J" "H" "D" "S"
Если вам интересно, сколько из них?
table(unlist(lapply(diamonds, function(x) unlist(strsplit(as.character(x), "")))))
# . 0 1 2 3 4 5 6 7 8 9 a
# 12082 261929 81785 142173 135042 108355 121267 157242 161862 91438 71904 67144 23161
# d D e E F G H i I J l m o
# 38539 6775 47424 9797 12942 28280 8304 15401 51763 2808 21551 27582 33976
# P r S u V y
# 13791 27483 51409 13791 49953 12082
(Это, по сути, ответ Акруна ... опубликованный до того, как я увидел его комментарий-редактирование.)
Используя ваш пример кадра:
k <- data.frame(cola = c("1&3#", "A4C%"), colb = c("%^", "89&"), stringsAsFactors = FALSE)
unique(unlist(lapply(k, function(x) unlist(strsplit(as.character(x), "")))))
# [1] "1" "&" "3" "#" "A" "4" "C" "%" "^" "8" "9"
И если вы хотите их в отсортированной строке без пробелов,
paste(sort(unique(unlist(lapply(k, function(x) unlist(strsplit(as.character(x), "")))))), collapse = "")
# [1] "#%&^13489AC"
Поскольку ваш вопрос предполагает, что вы рассматриваете возможность использования этого в регулярном выражении где-то, вы можете поместить это в скобки. Я бы не стал go испытывать боль при поиске диапазонов символов (например, AD-GW-Z24-9
), поскольку это дает вам очень низкую эффективность регулярных выражений, но потребует немного больше усилий для генерации.