使用匹配的JSON部分创建新列

时间:2016-10-17 14:13:01

标签: json r

我尝试将匹配的JSON部分从列'data'提取到新列'geo'中。此代码仅正确提取第一行,然后重复自身。我希望'geo'列可以阅读:

GEO STOCKHOLM,GEO NEW YORK,GEO MADRID,GEO LONDON

而非当前

GEO斯德哥尔摩,GEO斯德哥尔摩,GEO斯德哥尔摩,GEO斯德哥尔摩

代码:

library(rjson)
data <- c('["GEO STOCKHOLM","TYPE LOW"]','["GEO NEW YORK","TYPE MEDIUM"]','["GEO MADRID","TYPE HIGH"]','["GEO LONDON","TYPE MAX"]')
df <- data.frame(data, stringsAsFactors=FALSE)
df$geo <- grep("GEO", fromJSON(df$data), value = TRUE)

正如您所看到的,我只想将'geo'部分保留在分号内,并丢失'type'部分。查看df数据帧,这是我的(不正确的)输出:

Incorrect output df dataframe

2 个答案:

答案 0 :(得分:0)

这个怎么样?

df$geo <- sapply(sapply(df$data, FUN = fromJSON, simplify = FALSE), FUN = "[", 1)

                            data           geo
1   ["GEO STOCKHOLM","TYPE LOW"] GEO STOCKHOLM
2 ["GEO NEW YORK","TYPE MEDIUM"]  GEO NEW YORK
3     ["GEO MADRID","TYPE HIGH"]    GEO MADRID
4      ["GEO LONDON","TYPE MAX"]    GEO LONDON

答案 1 :(得分:0)

谢谢大家,我最终建立了自己的功能:

getJSON <- function(x) {
result <- grep("GEO", rjson::fromJSON(x), value = TRUE)
return(result)

}

然后:

df$geo <- sapply(df$data, getJSON)

这样我就能抓住所有的“地理”。元素,无论元素数量或顺序如何。你的意见帮助我终于到了那里。感谢。