Расщепление строк и генерация таблиц частот в R - PullRequest
4 голосов
/ 30 декабря 2011

У меня есть столбец названий фирм в R кадре данных, который выглядит примерно так:

"ABC Industries"  
"ABC Enterprises"  
"123 and 456 Corporation"  
"XYZ Company"

И так далее. Я пытаюсь создать таблицы частот для каждого слова, которое появляется в этом столбце, например, что-то вроде этого:

Industries   10  
Corporation  31  
Enterprise   40  
ABC          30  
XYZ          40  

Я относительно новичок в R , поэтому мне было интересно найти хороший способ подойти к этому. Должен ли я разбивать строки и помещать каждое отдельное слово в новый столбец? Есть ли способ разделить строку из нескольких слов на несколько строк одним словом?

Ответы [ 3 ]

9 голосов
/ 30 декабря 2011

Если вы хотите, вы можете сделать это в одну строку:

R> text <- c("ABC Industries", "ABC Enterprises", 
+            "123 and 456 Corporation", "XYZ Company")
R> table(do.call(c, lapply(text, function(x) unlist(strsplit(x, " ")))))

        123         456         ABC         and     Company 
          1           1           2           1           1 
Corporation Enterprises  Industries         XYZ 
          1           1           1           1 
R> 

Здесь я использую strsplit(), чтобы разбить каждую вступительную вступительную часть компонентов;это возвращает список (в списке).Я использую do.call(), поэтому просто объединяю все списки результатов в один вектор, который table() суммирует.

6 голосов
/ 30 декабря 2011

Вот еще одна строчка.Он использует paste() для объединения всех записей столбца в одну длинную текстовую строку, которую затем разделяет и табулирует:

text <- c("ABC Industries", "ABC Enterprises", 
         "123 and 456 Corporation", "XYZ Company")

table(strsplit(paste(text, collapse=" "), " "))
0 голосов
/ 02 февраля 2018

Вы можете использовать пакеты tidytext и dplyr:

set.seed(42)

text <- c("ABC Industries", "ABC Enterprises", 
       "123 and 456 Corporation", "XYZ Company")

data <- data.frame(category = sample(text, 100, replace = TRUE),
                   stringsAsFactors = FALSE)

library(tidytext)
library(dplyr)

data %>%
  unnest_tokens(word, category) %>%
  group_by(word) %>%
  count()

#> # A tibble: 9 x 2
#> # Groups:   word [9]
#>          word     n
#>         <chr> <int>
#> 1         123    29
#> 2         456    29
#> 3         abc    45
#> 4         and    29
#> 5     company    26
#> 6 corporation    29
#> 7 enterprises    21
#> 8  industries    24
#> 9         xyz    26
...