У меня есть следующая строка в качестве примера в одном столбце моего фрейма данных:
A = [{'name': 'Bank', 'id': 559}, {'name': 'Cinema', 'id': 2550}, {'name': 'Shopping', 'id': 10201}]
Я пробовал следующий код для извлечения слов («Банк», «Кино», «Покупки») из этой строки, но он дает мне «символ (0)»:
stringr::str_extract_all(A, "\\w+(?='\\})")
Могу я спросить, как можно выполнить эту задачу?
Поскольку это прямой 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
в каждой «строке», чтобы получить от нее результаты.
Можете ли вы опубликовать пример фрейма данных с этим столбцом и разными значениями?
Хакерство (используйте подход 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"
Можно ли сделать это для всех строк в этом столбце df?
@ user36729: Это возможно, но не рекомендуется. Разместите еще немного контента, чтобы узнать, что можно сделать.
Когда я хочу сделать это для каждой строки в этом столбце, я получаю следующую ошибку: «Ошибка: ошибка синтаксического анализа: конечный мусор». Вы знаете, как это решить?