R数据框,字典列表为字段

时间:2017-10-18 12:54:05

标签: json r parsing

我有一个数据框,其中包含一个名为identifier的列,其中包含产品标识符数据作为字符串列表。

test_data <- data.frame(
  identifiers = c(
  "[{\"type\":\"ISBN\",\"value\":\"9781231027073\"}]",
  "[{\"type\":\"EAN\",\"value\":\"5055266202847\"},{\"type\":\"EAN\",\"value\":\"4053162095984\"}]"),
  id = c(1,2), stringsAsFactors = FALSE)


> test_data
  identifiers                                                                     id
1 [{"type":"ISBN","value":"9781231027073"}]                                        1
2 [{"type":"EAN","value":"5055266202847"},{"type":"EAN","value":"4053162095984"}]  2

我想要达到的目标是:

output_test_data <- data.frame(
  type = c("ISBN", "EAN", "EAN"),
  value = c("9781231027073","5055266202847","4053162095984"),
  id = c(1,2,2), stringsAsFactors = FALSE)

> output_test_data
  type         value id
1 ISBN 9781231027073  1
2  EAN 5055266202847  2
3  EAN 4053162095984  2

我最接近解决方案的是应用jsonlite中的fomJSON函数。

jsonlite::fromJSON(test_data$identifiers[1])

或使用这样的循环:

for (i in test_data$identifiers) {
  print(jsonlite::fromJSON(i))
}

然而,我正在努力:

1)将其应用于所有行。 2)保存有关id的信息,从原始数据到结果。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

你可以这样做:

df_result <- apply(test_data,1,function(x){
    id_tmp <- x[2]

    df_out <- jsonlite::fromJSON(x[1])
    df_out$id <- id_tmp
    return(df_out)
})
df_result <- do.call("rbind",df_result)