我有一个数据框,其中包含一个名为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的信息,从原始数据到结果。
有人可以帮忙吗?
答案 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)