Найти все уникальные символы в кадре данных в R - PullRequest
2 голосов
/ 10 апреля 2020

Мне интересно, как наиболее эффективно найти все уникальные символы из фрейма данных в R.

, например, например: - [0-9, az, AZ, ",", "$ "," & "," # "и т. д.]

> k
  cola colb
1 1&3#   %^
2 A4C%  89&

Ожидаемый вывод - список, содержащий все уникальные символы, включая специальные символы. т.е. 123#%^AC89&

1 Ответ

5 голосов
/ 10 апреля 2020

В этом нет ничего действительно эффективного, но ... демонстрация на наборе данных 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), поскольку это дает вам очень низкую эффективность регулярных выражений, но потребует немного больше усилий для генерации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...