Извлечь данные из строки через R - PullRequest
0 голосов
/ 29 апреля 2018

У меня есть один фрейм данных, который имеет категорию один из столбца. Данные в столбце категории, упомянутые ниже:

Application Platforms|Real Time|Social Network Media
Apps|Games|Mobile
Curated Web
Software
Games
Biotechnology
Analytics
Mobile
E-Commerce
Entertainment|Games|Software
Networking|Real Estate|Web Hosting

Список категорий представляет собой список из нескольких подсекторов, разделенных каналом (вертикальная черта |). Я хочу извлечь основной сектор, который является первой строкой перед вертикальной чертой ("|").

Это означает, что я хочу, чтобы вывод был,

Application Platforms
Apps
Curated Web
Software
Games
Biotechnology
Analytics
Mobile
E-Commerce
Entertainment
Networking

Пожалуйста, помогите мне, как я могу сделать это с помощью любой функции, я пытался использовать функции пакета stringr.

Ответы [ 3 ]

0 голосов
/ 29 апреля 2018

Или используя stringr ...

str_match("Application Platforms|Real Time|Social Network Media",
       "^(.+?)[|$]")[,2] #match start of string up to first | or end or string

[1] "Application Platforms"

или ...

str_replace("Application Platforms|Real Time|Social Network Media",
       "\\|.+$","") #replace | and any subsequent characters with ""

[1] "Application Platforms"

или ...

str_extract("Application Platforms|Real Time|Social Network Media",
       "[^|]+") #extract first sequence of characters that are not a |

[1] "Application Platforms"

или ...

str_split_fixed("Application Platforms|Real Time|Social Network Media",
       "\\|",2)[,1] #split at first | and take the first section

[1] "Application Platforms"
0 голосов
/ 29 апреля 2018

Использование strsplit:

category1 <- strsplit(df$category, "|", fixed = TRUE)
df$category <- sapply(category1, `[[`, 1)     # or, purrr::map_chr(category1, 1)

Это решение делает ваше намерение немного яснее, чем использование sub, я думаю. Опять же, для этого требуется дополнительная строка.

0 голосов
/ 29 апреля 2018

Мы можем использовать sub здесь:

df$category <- sub("^([^|]+).*", "\\1", df$category)

Вот еще один вариант, который не использует группу захвата:

df$category <- sub("\\|.*", "", df$category)

Демо

...