我在数据框的一列中有以下字符串作为示例:
A = [{'name': 'Bank', 'id': 559}, {'name': 'Cinema', 'id': 2550}, {'name': 'Shopping', 'id': 10201}]
我尝试过以下代码从这个字符串中提取单词('Bank','Cinema','Shopping'),但是给了'character(0)':
stringr::str_extract_all(A, "\\w+(?='\\})")
请问如何完成这项任务?
答案 0 :(得分:2)
由于这是直接的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行数据帧。然后,在每个&#39;行上使用lapply
。从中获得结果。
答案 1 :(得分:0)
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"