Подсчитайте длину слов и обрежьте строки, находящиеся под порогом - PullRequest
1 голос
/ 22 января 2020

Имея такой фрейм данных, как этот:

data.frame(id = c(1,2,3), text = c("my text here", "another the here but different", "no text"))

Как можно вычислить для каждой строки количество слов, которые есть, и вырезать строки, которые равны или меньше 2 слов?

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

data.frame(id = c(1,2), text = c("my text here", "another the here but different"))

Ответы [ 3 ]

3 голосов
/ 22 января 2020

Одна опция, использующая библиотеку stringr, может быть:

df[!is.na(word(df$text, 3)), ]

  id                           text
1  1                   my text here
2  2 another the here but different

Или другая опция, использующая библиотеку stringr (предоставлена ​​@Sotos):

df[str_count(df$text, fixed(" ")) >= 2, ]
1 голос
/ 22 января 2020

Вы можете использовать strsplit и lengths, чтобы найти более 2 слов.

df[lengths(strsplit(as.character(df$text), "\\b ")) > 2,]
#  id                           text
#1  1                   my text here
#2  2 another the here but different

df[lengths(strsplit(as.character(df$text), "\\W+")) > 2,] #Alternative

или gregexpr:

df[lengths(gregexpr("\\W+", df$text)) > 1,]
  id                           text
1  1                   my text here
2  2 another the here but different

Посмотрите at Подсчитать количество всех слов в строке .

1 голос
/ 22 января 2020

Вот базовое решение R, использующее gregexpr() + lengths() + subset():

dfout <- subset(df,lengths(gregexpr("[[:alpha:]]+",df$text))>2)

, такое что

> dfout
  id                           text
1  1                   my text here
2  2 another the here but different

DATA

df <- structure(list(id = c(1, 2, 3), text = structure(c(2L, 1L, 3L
), .Label = c("another the here but different", "my text here", 
"no text"), class = "factor")), class = "data.frame", row.names = c(NA, 
-3L))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...