#r #string #data-manipulation #strsplit
Вопрос:
Надеялся получить некоторую помощь в решении этой проблемы. Итак, у меня есть столбец с двумя типами строк, и мне нужно будет разделить строки на несколько столбцов, используя 2 разных условия. Я могу понять, как разделить их по отдельности, но изо всех сил пытаюсь добавить, возможно, оператор IF в свой код. Это пример набора данных ниже:
data = data.frame(string=c("HFUFN-087836_661", "207465-125 - IK_6 Mar 2009.docx_37484956"))
Для первого типа переменной (с _). Я хотел бы расстаться после _. Поэтому я использовал для этого следующий код
strsplit(data$string, "-")
Для переменных, которые have.docx в них я хотел бы разделиться после docx. Я не могу разделить на основе»_», так как в этой строке он встречается несколько раз. Поэтому я использовал следующий код:
strsplit(data$string, "x_")
Мой вопрос в том, что оба этих типа строк отображаются в одном столбце. Есть ли способ сказать R, если «docx» находится в строке, а затем разделяется после x_, но если он не разделяется на _?
Любая помощь будет признательна — Спасибо вам, ребята!
Ответ №1:
Вот tidyr
решение:
library(tidyr) data %gt;% extract(string, into = c("1","2"), # choose your own column labels "(.*?)_([^_] )$") 1 2 1 HFUFN-087836 661 2 207465-125 - IK_6 Mar 2009.docx 37484956
Как работает регулярное выражение:
Регулярное выражение разбивает строки на две «группы захвата» плюс подчеркивание между ними:
(.*?)
: первая группа захвата, соответствующая любому символу (.
) ноль или более раз (*
) без жадности (?
)_
: буквальное подчеркивание([^_] )$
: вторая группа захвата, соответствующая любому символу, который не является символом подчеркивания ([^_]
) один или несколько раз ($
)
Данные:
data = data.frame(string=c("HFUFN-087836_661", "207465-125 - IK_6 Mar 2009.docx_37484956"))
Комментарии:
1. Эй, это сработало — большое тебе спасибо. Если это не слишком большая работа, не могли бы вы, пожалуйста, объяснить, как вы это сделали? Я не совсем понимаю эту часть: «»(.*?)_([^_] )$»)». Большое спасибо!
2. Предоставили объяснение того, как работает эта часть регулярных выражений