如何在R语言的DataFrame中提取JSON列的occupation字段
提取类JSON列中的occupation字段
针对你数据里的speakers列(类JSON结构),不建议用字符串替换的方式提取字段,容易因为格式变动出错,更可靠的方式是用专门的JSON处理工具:
方法一:使用jsonlite包(推荐)
这个包可以直接解析JSON格式的字符串,精准提取目标字段:
# 安装包(首次使用时运行) # install.packages("jsonlite") # 加载包 library(jsonlite) # 加载示例数据集 df <- structure(list(X_id = c(21L, 1L, 7L, 47L, 55L), duration = c(992L, 957L, 1266L, 1126L, 1524L), event = c("TED2006", "TED2006", "TED2006", "TEDGlobal 2005", "TED2006"), likes = c("17000", "110000", "60000", "80000", "14000"), published_date = structure(c(1156464660, 1151367060, 1151367060, 1158019860, 1153786260), class = c("POSIXct", "POSIXt"), tzone = "UTC"), related_videos = c("[\"144\",\"1282\",\"1379\",\"87\",\"2302\",\"2638\"]", "[\"243\",\"547\",\"2093\",\"74405\",\"64693\",\"83767\"]", "[\"1725\",\"2274\",\"172\",\"2664\",\"2464\",\"1268\"]", "[\"2237\",\"701\",\"1095\",\"1386\",\"76211\",\"242\"]", "[\"2228\",\"1476\",\"800\",\"2890\",\"45233\",\"2694\"]"), speakers = c("[{\"name\":\"Mena Trott\",\"occupation\":\"Blogger; cofounder, Six Apart\"}]", "[{\"name\":\"Al Gore\",\"occupation\":\"Climate advocate\"}]", "[{\"name\":\"David Pogue\",\"occupation\":\"Technology columnist\"}]", "[{\"name\":\"David Deutsch\",\"occupation\":\"Physicist, author\"}]", "[{\"name\":\"Jehane Noujaim\",\"occupation\":\"Filmmaker\"}]")), row.names = c(NA, 5L), class = "data.frame") # 解析speakers列,提取occupation df$occupation <- sapply(fromJSON(df$speakers), function(x) x$occupation) # 查看结果 df$occupation
运行后会得到每个行对应的occupation值:
[1] "Blogger; cofounder, Six Apart" "Climate advocate" "Technology columnist" "Physicist, author" "Filmmaker"
方法二:使用正则表达式(仅当无法用JSON包时)
如果不想依赖外部包,可以用stringr包的正则匹配提取:
# 加载stringr library(stringr) # 提取occupation字段内容 df$occupation <- str_extract(df$speakers, '(?<="occupation":")([^"]+)') # 查看结果 df$occupation
这个方法通过匹配"occupation":"之后到下一个"之间的内容来提取,但如果JSON格式有变动(比如空格、转义符),可能会失效,所以优先推荐第一种方法。
内容的提问来源于stack exchange,提问作者Dário Rodrigues
相关产品推荐
相关产品推荐

