Добавить столбец списка в фрейм данных - PullRequest
0 голосов
/ 09 января 2019

у меня есть датафрейм с 100 строками У меня есть столбец в рамках dataframe, который состоит из текста. Я хотел бы разделить текстовый столбец на предложения, чтобы текстовый столбец стал списком предложений. Я делю с помощью функции пакета stringi stri_split_lines

Пример:

rowID       text
1         There is something wrong. It is bad. We made it better
2          The sky is blue. The sea is green.

Желаемый выход

rowID       text 
1           [1] There is something wrong
            [2]It is bad. 
            [3]We made it better
2           [1]The sky is blue.
            [2]The sea is green.

Я пытался

dataframe<-do.call(rbind.data.frame, stri_split_lines(dataframe$text, omit_empty = TRUE))

Ответы [ 2 ]

0 голосов
/ 09 января 2019

Вот, пожалуйста, решение от тидиверса (и больше не используется stringi):

Предположим, ваш фрейм данных называется df.

Решение

  library(dplyr)

  df %>%
    mutate(text= strsplit(text, "(?<=[[:punct:]])\\s(?=[A-Z])", perl=T)) 

Объяснение: strsplit в вызове mutate возвращает список, поэтому у вашего фрейма данных теперь есть истинный список-столбец. (Регулярное выражение с разделением строк найдено здесь )

Что если я хочу разбить столбец списка на несколько строк?

Чтобы разделить элементы этого списка на их собственные строки, у вас есть два варианта:

  1. просто позвоните tidyr::unnest в столбце списка:

    df %>% tidyr::unnest(text)
    
  2. Используйте tidyr::separate_rows на исходном кадре данных (до создания столбца списка):

    df %>% tidyr::separate_rows(text, sep= "(?<=[[:punct:]])\\s(?=[A-Z])")
    
0 голосов
/ 09 января 2019

Пример:

dataframe[["text"]] <- strsplit(dataframe[["text"]], split = "\\.")
str(dataframe)

'data.frame':   2 obs. of  2 variables:
 $ rowID: int  1 2
 $ text :List of 2
  ..$ : chr  "There is something wrong" " It is bad" " We made it better"
  ..$ : chr  "The sky is blue" " The sea is green"

Данные

dataframe <- data.frame(
  rowID = 1:2, 
  text = 
    c(
      "There is something wrong. It is bad. We made it better",
      "The sky is blue. The sea is green."
    ),
  stringsAsFactors = FALSE
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...