Извлечение слов из нескольких строк в r - PullRequest
0 голосов
/ 01 мая 2018

В качестве примера в одном столбце в моем фрейме данных приведена следующая строка:

 A = [{'name': 'Bank', 'id': 559}, {'name': 'Cinema', 'id': 2550}, {'name': 'Shopping', 'id': 10201}]

Я пытался использовать следующий код для извлечения слов («Банк», «Кинотеатр», «Покупки») из этой строки, но выводит «символ (0)»:

 stringr::str_extract_all(A, "\\w+(?='\\})")

Могу я спросить, как можно выполнить эту задачу?

Ответы [ 2 ]

0 голосов
/ 01 мая 2018

Hackish (используйте подход JSON!):

A <- c("[{'name': 'Bank', 'id': 559}, {'name': 'Cinema', 'id': 2550}, {'name': 'Shopping', 'id': 10201}]")

pattern <- "'name':\\s*['\"]\\K\\w+"
m <- gregexpr(pattern, A, perl = T)
(words <- unlist(regmatches(A, m)))

Это даст

[1] "Bank"     "Cinema"   "Shopping"
0 голосов
/ 01 мая 2018

Поскольку это прямой JSON, вы можете сделать что-то вроде этого:

library(jsonlite)

A <- "[{'name': 'Bank', 'id': 559}, {'name': 'Cinema', 'id': 2550}, {'name': 'Shopping', 'id': 10201}]"
A <- gsub("'", '"', A) # fromJSON expects double quotes.

l <- fromJSON(A)
l$name

РЕДАКТИРОВАТЬ: Предполагая, что у вас есть столбец с несколькими массивами JSON, такими как A, а не один массив JSON, как показано выше в вашем вопросе, вам нужно будет сделать что-то вроде этого:

df <- data_frame(A = rep("[{'name': 'Bank', 'id': 559}, {'name': 'Cinema', 'id': 2550}, {'name': 'Shopping', 'id': 10201}]", 5))

df$A <- gsub("'", '"', df$A)
lapply(df$A, function(x) {j <- fromJSON(x); j$name})

Я просто повторил ту же строку массива JSON, которую вы указали пять раз, чтобы создать фрейм данных из 5 строк. Затем используйте lapply в каждой «строке», чтобы получить из нее результаты.

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