Найти значения слева и справа от последнего периода с помощью регулярных выражений и разделить их в dplyr - PullRequest
2 голосов
/ 08 июля 2019

У меня есть фрейм данных с именами столбцов, такими как:

[127] "quiz.32.player.submitted_answer_private"         "quiz.32.player.rescue_event"                    
[129] "quiz.33.player.solution"                         "quiz.33.player.submitted_answer"                
[131] "quiz.33.player.submitted_answer_private"         "quiz.33.player.rescue_event"                    
[133] "partner_quiz.1.player.solution"                  "partner_quiz.1.player.submitted_answer"         
[135] "partner_quiz.1.player.submitted_answer_private"  "partner_quiz.1.player.rescue_event"             
[137] "partner_quiz.2.player.solution"                  "partner_quiz.2.player.submitted_answer"         
[139] "partner_quiz.2.player.submitted_answer_private"  "partner_quiz.2.player.rescue_event"      

Я пытаюсь отделить эти значения, извлекая значение справа от последнего периода и значение слева от него.Мой конвейер dplyr для этого выглядит следующим образом:

frame <- data %>%
  gather(k, value) %>%
  separate(k, into = c("quiz_number", "suffix"), sep = "\\.(?=player)")

По какой-то причине в результирующем data.frame опускаются все столбцы с префиксом «partner».Любые идеи, почему?

Редактировать: результирующий разделитель должен иметь в столбце quiz_number все содержимое слева от последнего периода (например, quiz.32.player и partner_quiz.2.player) и в столбце "суффикс"все содержимое справа от последнего периода (например, submitted_answer_private и solution)

1 Ответ

3 голосов
/ 08 июля 2019

Вместо 'player' в регулярном выражении поиска сделайте положительное совпадение для символов, которые не являются . до конца ($) строки

library(dplyr)
library(tidyr)
data %>%
   gather(k, value) %>%
   separate(k, into = c("quiz_number", "suffix"), sep = "\\.(?=[^.]+$)")

Inкод ОП, он соответствует . перед строкой 'player', но после 'player' есть . s, например quiz.32.player.rescue_event

...