我尝试将匹配的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数据帧,这是我的(不正确的)输出:
答案 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)
这样我就能抓住所有的“地理”。元素,无论元素数量或顺序如何。你的意见帮助我终于到了那里。感谢。