Получение второго элемента после использования str_split () в R - PullRequest
0 голосов
/ 27 февраля 2019

У меня есть фрейм данных, который содержит несколько вопросов.Я хочу опустить ведущий номер и период из вопроса, но оставлю все остальное.Я не очень понимаю регулярные выражения, но это похоже на идеальное использование для str_split(), особенно в dplyr конвейере.Однако, после разделения строки, я не уверен, как захватить второй элемент.Я пытался получить доступ к нему по позиции, и это не сработало.

x <- structure(list(question = c("01. I like my job.", 
                                 "02. I like my house.", 
                                 "03. I like my car.")), class = "data.frame", row.names = c(NA, -3L))

x %>% 
  mutate(words = str_split(question, "."))

Возвращает это:

question                        words
01. I like my job.         <chr [19]>           
02. I like my house.       <chr [21]>           
03. I like my car.         <chr [19]>   

Я хочу, чтобы это выглядело так:

question                             words
01. I like my job.         I like my job.           
02. I like my house.       I like my house.     
03. I like my car.         I like my car.

Я также пытался использовать separate() и strsplit() но я тоже не смог сделать ни одной из этих работ.

Ответы [ 2 ]

0 голосов
/ 27 февраля 2019

Вы можете изменить шаблон на \\., а затем получить второй элемент для столбца word.

library(tidyverse)

x %>% 
  mutate(words = str_split(question, "\\. ")[[1]][[2]]) 
#               question          words
# 1   01. I like my job. I like my job.
# 2 02. I like my house. I like my job.
# 3   03. I like my car. I like my job.
0 голосов
/ 27 февраля 2019

Я думаю, что вы ищете str_replace (или sub в базе R)

x %>% mutate(words = str_replace(question, "^\\d+\\.", ""))
#              question             words
#1   01. I like my job.    I like my job.
#2 02. I like my house.  I like my house.
#3   03. I like my car.    I like my car.

Объяснение:

  1. ^ - левый якорь строки
  2. \\d+\\. соответствует одной или нескольким цифрам, за которыми следует полная остановка

Вы можете использовать str_split следующим образом

x %>% mutate(words = paste0(map_chr(str_split(question, "\\."), 2), "."))

дает тот же результат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...