从 R 数据帧的行中提取 JSON 数据

Med*_*ist 4 json r sapply dplyr

我有一个数据框,其中列参数的值是 Json 数据:

#  Parameters
#1 {"a":0,"b":[10.2,11.5,22.1]}
#2 {"a":3,"b":[4.0,6.2,-3.3]}
...
Run Code Online (Sandbox Code Playgroud)

我想提取每行的参数并将它们作为AB1B2B3列附加到数据框中。

我该怎么做?

如果可能且高效的话,我宁愿使用dplyr 。

Jer*_*oen 5

在您的示例数据中,每行都包含一个 json 对象。这种格式称为jsonlines又名ndjson,并且 jsonlite 包有一个特殊的函数stream_in可以将此类数据解析为数据框:

# Example data
mydata <- data.frame(parameters = c(
  '{"a":0,"b":[10.2,11.5,22.1]}',
  '{"a":3,"b":[4.0,6.2,-3.3]}'
), stringsAsFactors = FALSE)

# Parse json lines
res <- jsonlite::stream_in(textConnection(mydata$parameters))

# Extract columns
a <- res$a
b1 <- sapply(res$b, "[", 1)
b2 <- sapply(res$b, "[", 2)
b3 <- sapply(res$b, "[", 3)
Run Code Online (Sandbox Code Playgroud)

在您的示例中,json 结构相当简单,因此其他建议也有效,但此解决方案将推广到更复杂的 json 结构。

  • 尝试生成一个包含 60M 记录的 json 字符串。 (2认同)