从r中的多个字符串中提取单词

时间:2018-05-01 15:30:52

标签: r string text

我在数据框的一列中有以下字符串作为示例:

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

我尝试过以下代码从这个字符串中提取单词('Bank','Cinema','Shopping'),但是给了'character(0)':

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

请问如何完成这项任务?

2 个答案:

答案 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"