R dataframe все столбцы слов со знаком сочленения, стоящие перед строкой, - создать союзы - bigram - dplyr - PullRequest
0 голосов
/ 04 декабря 2018

У меня есть фрейм данных этого формата:

df <- data.frame(names= c('perform data cleansing','information categorisation'))
                      names
1     perform data cleansing
2 information categorisation

И я хотел бы получить этот фрейм со всеми фуршетами :

                        names           tokens1              tokens2
1      perform data cleansing           perform                 data
1      perform data cleansing              data            cleansing 
1      perform data cleansing         cleansing              perform
2  information categorisation       information       categorisation

Ответы [ 3 ]

0 голосов
/ 04 декабря 2018

Учитывая, что, похоже, вы хотите выводить фрейм данных, будет работать следующее.Он также будет учитывать строки с любым количеством биграмм.

library(dplyr)
library(tidyr)
library(stringr)

df %>%
  mutate(names2 = ifelse(str_count(names, "\\S+") > 2, paste(names, word(names, 1)), paste0(names))) %>%
  separate(names2, paste0('token', 1:max(str_count(.$names2, "\\S+"))), fill = "right") %>%
  gather(key, token1, -names) %>%
  arrange(names, key) %>%
  mutate(token2 = lead(token1)) %>%
  na.omit() %>%
  select(-key)

                       names      token1         token2
1 information categorisation information categorisation
5     perform data cleansing     perform           data
6     perform data cleansing        data      cleansing
7     perform data cleansing   cleansing        perform
0 голосов
/ 05 декабря 2018

Я попробовал ответить, вдохновленный предыдущими.

df <- tibble(names= c('perform data cleansing','information categorisation'), stringsAsFactors = FALSE)

words <- strsplit( df$names, " ", fixed = TRUE)

mutate(df, name1=lapply(words, combn, 2, simplify=F)) %>%
    unnest(name1, .id='index') %>%
        ## separate list in double columns
        separate(col=name1, into=c('supp0', 'cooc1','cooc2', 'supp1')) %>% 
            ## reorder columns and suppress extra ones 
            select(index, names, cooc1, cooc2, -supp0, -supp1, -stringsAsFactors)

Где индекс указывает names 'оригинальный индекс.

# A tibble: 4 x 4
  index names                      cooc1       cooc2         
  <int> <chr>                      <chr>       <chr>         
1     1 perform data cleansing     perform     data          
2     1 perform data cleansing     perform     cleansing     
3     1 perform data cleansing     data        cleansing     
4     2 information categorisation information categorisation
0 голосов
/ 04 декабря 2018
df <- data.frame(names= c('perform data cleansing','information categorisation'), stringsAsFactors = FALSE)

#build list of words
words <- strsplit( df$names, " ", fixed = TRUE)
#find every combination of two words
combo <- lapply( words, combn, 2, simplify = FALSE )

# [[1]]
# [[1]][[1]]
# [1] "perform" "data"   
# 
# [[1]][[2]]
# [1] "perform"   "cleansing"
# 
# [[1]][[3]]
# [1] "data"      "cleansing"
# 
# 
# [[2]]
# [[2]][[1]]
# [1] "information"    "categorisation"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...