Извлечение всех слов и групп букв в строку, а затем превращение каждого слова в отдельный фрагмент данных с помощью gsub () в R - PullRequest
0 голосов
/ 27 февраля 2020

Скажем, у нас есть:

stringTest <- c("Here we have 4 words", "Here we have avwerfaf 4")

Ожидаемый результат:

"Здесь" "мы" "имеем" слова "" Здесь "" мы "" имеем "" avwerfaf "

Я хотел бы использовать gsub (), но другие методы, безусловно, исключаются. Спасибо, парни!

Ответы [ 3 ]

2 голосов
/ 27 февраля 2020

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

result <- unlist(strsplit(stringTest, " |\\d"))
result[result != ""]
#> [1] "Here"     "we"       "have"     "words"    "Here"     "we"      
#> [7] "have"     "avwerfaf"

или, если вы предпочитаете однострочник:

unlist(lapply(strsplit(stringTest, "\\W|\\d"), function(x) x[x != ""]))
0 голосов
/ 28 февраля 2020

Подпадает под категорию "другой подход". Похоже, вы делаете токенизацию по словам, отбрасывая числа.

library(tokenizers)

unlist(tokenize_words(stringTest, lowercase = FALSE, strip_numeric = TRUE))

Что дает:

[1] "Here"     "we"       "have"     "words"    "Here"     "we"       "have"     "avwerfaf"

Если вы работаете вне фрейма данных, что-то вроде это может быть полезно.

library(dplyr)
library(tidytext)

df <- tibble(description = stringTest)

df2 <- df %>% 
  rowid_to_column() %>% 
  unnest_tokens(word, description, to_lower = FALSE, strip_numeric = TRUE)

, который возвращает новый тиббл:

> df2
# A tibble: 8 x 2
  rowid word    
  <int> <chr>   
1     1 Here    
2     1 we      
3     1 have    
4     1 words   
5     2 Here    
6     2 we      
7     2 have    
8     2 avwerfaf
0 голосов
/ 27 февраля 2020
library(tidyverse)

stringTest <- c("Here we have 4 words", "Here we have avwerfaf 4")

gsub(" \\d", replacement = "", stringTest) %>%
  str_split(pattern = " ") %>%
  unlist()
...