如何将JSON blob中的值提取到R数据帧中的新列中?
我被困在以下问题上: 我有一个数据帧,其中有一个包含JSON对象的变量(在如何将JSON blob中的值提取到R数据帧中的新列中?,json,r,Json,R,我被困在以下问题上: 我有一个数据帧,其中有一个包含JSON对象的变量(在var2中): (粘贴箱上的代码) 我想提取var2中的JSON属性,并将它们放到新列中的数据框中,如下所示: var1 var2 prop1 prop2 prop3 1 1 {"property1": "val1", "property2": 5} val1 5 NA 2 2 {"property1": "val2", "p
var2
中):
(粘贴箱上的代码)
我想提取var2
中的JSON属性,并将它们放到新列中的数据框中,如下所示:
var1 var2 prop1 prop2 prop3
1 1 {"property1": "val1", "property2": 5} val1 5 NA
2 2 {"property1": "val2", "property2": 8} val2 8 NA
3 3 {"property1": "val3", "property2": 7} val3 7 NA
4 4 {"property1": "val4", "property2": 0} val4 0 NA
5 5 {"property1": "val5", "property2": 9} val5 NA 9
给定相同序列中的相同属性,我找到了使其工作的方法:
jsonProps <- sapply(df$var2, function(x) fromJSON(x)) %>%
t() %>%
as.data.frame()
rownames(jsonProps) <- NULL
y <- cbind(df, jsonProps)
jsonProps%
t()%>%
as.data.frame()
rownames(jsonProps)这并不能满足您的所有需求,但可能更好
library("dplyr")
library("jsonlite")
get_it <- function(x) {
jsonlite::fromJSON(as.character(x))
}
tbl_df(test) %>%
rowwise() %>%
mutate(one = get_it(var2)[[1]],
two = get_it(var2)[[2]])
Source: local data frame [5 x 4]
Groups: <by row>
var1 var2 one two
(dbl) (fctr) (chr) (int)
1 1 {"property1": "val1", "property2": 5} val1 5
2 2 {"property1": "val2", "property2": 8} val2 8
3 3 {"property1": "val3", "property2": 7} val3 7
4 4 {"property1": "val4", "property2": 0} val4 0
5 5 {"property1": "val5", "property3": 9} val5 9
库(“dplyr”)
图书馆(“jsonlite”)
得到它%
行()
突变(一=得到它(var2)[[1]],
二=得到它(var2)[[2]]
来源:本地数据帧[5 x 4]
组:
var1 var2一二
(dbl)(fctr)(chr)(内部)
1{“财产1”:“价值1”,“财产2”:5}5
2{“不动产1”:“val2”,“不动产2”:8}val2 8
3{“财产1”:“val3”,“财产2”:7}val3 7
4{“property1”:“val4”,“property2”:0}val4 0
5{“不动产1”:“val5”,“不动产3”:9}val5 9
这并不是你想要的一切,但也许更好
library("dplyr")
library("jsonlite")
get_it <- function(x) {
jsonlite::fromJSON(as.character(x))
}
tbl_df(test) %>%
rowwise() %>%
mutate(one = get_it(var2)[[1]],
two = get_it(var2)[[2]])
Source: local data frame [5 x 4]
Groups: <by row>
var1 var2 one two
(dbl) (fctr) (chr) (int)
1 1 {"property1": "val1", "property2": 5} val1 5
2 2 {"property1": "val2", "property2": 8} val2 8
3 3 {"property1": "val3", "property2": 7} val3 7
4 4 {"property1": "val4", "property2": 0} val4 0
5 5 {"property1": "val5", "property3": 9} val5 9
库(“dplyr”)
图书馆(“jsonlite”)
得到它%
行()
突变(一=得到它(var2)[[1]],
二=得到它(var2)[[2]]
来源:本地数据帧[5 x 4]
组:
var1 var2一二
(dbl)(fctr)(chr)(内部)
1{“财产1”:“价值1”,“财产2”:5}5
2{“不动产1”:“val2”,“不动产2”:8}val2 8
3{“财产1”:“val3”,“财产2”:7}val3 7
4{“property1”:“val4”,“property2”:0}val4 0
5{“不动产1”:“val5”,“不动产3”:9}val5 9
这并不是你想要的一切,但也许更好
library("dplyr")
library("jsonlite")
get_it <- function(x) {
jsonlite::fromJSON(as.character(x))
}
tbl_df(test) %>%
rowwise() %>%
mutate(one = get_it(var2)[[1]],
two = get_it(var2)[[2]])
Source: local data frame [5 x 4]
Groups: <by row>
var1 var2 one two
(dbl) (fctr) (chr) (int)
1 1 {"property1": "val1", "property2": 5} val1 5
2 2 {"property1": "val2", "property2": 8} val2 8
3 3 {"property1": "val3", "property2": 7} val3 7
4 4 {"property1": "val4", "property2": 0} val4 0
5 5 {"property1": "val5", "property3": 9} val5 9
库(“dplyr”)
图书馆(“jsonlite”)
得到它%
行()
突变(一=得到它(var2)[[1]],
二=得到它(var2)[[2]]
来源:本地数据帧[5 x 4]
组:
var1 var2一二
(dbl)(fctr)(chr)(内部)
1{“财产1”:“价值1”,“财产2”:5}5
2{“不动产1”:“val2”,“不动产2”:8}val2 8
3{“财产1”:“val3”,“财产2”:7}val3 7
4{“property1”:“val4”,“property2”:0}val4 0
5{“不动产1”:“val5”,“不动产3”:9}val5 9
这并不是你想要的一切,但也许更好
library("dplyr")
library("jsonlite")
get_it <- function(x) {
jsonlite::fromJSON(as.character(x))
}
tbl_df(test) %>%
rowwise() %>%
mutate(one = get_it(var2)[[1]],
two = get_it(var2)[[2]])
Source: local data frame [5 x 4]
Groups: <by row>
var1 var2 one two
(dbl) (fctr) (chr) (int)
1 1 {"property1": "val1", "property2": 5} val1 5
2 2 {"property1": "val2", "property2": 8} val2 8
3 3 {"property1": "val3", "property2": 7} val3 7
4 4 {"property1": "val4", "property2": 0} val4 0
5 5 {"property1": "val5", "property3": 9} val5 9
库(“dplyr”)
图书馆(“jsonlite”)
得到它%
行()
突变(一=得到它(var2)[[1]],
二=得到它(var2)[[2]]
来源:本地数据帧[5 x 4]
组:
var1 var2一二
(dbl)(fctr)(chr)(内部)
1{“财产1”:“价值1”,“财产2”:5}5
2{“不动产1”:“val2”,“不动产2”:8}val2 8
3{“财产1”:“val3”,“财产2”:7}val3 7
4{“property1”:“val4”,“property2”:0}val4 0
5{“不动产1”:“val5”,“不动产3”:9}val5 9
您可以执行以下操作:
library(plyr)
library(jsonlite)
ll = lapply(df$var2, function(x) jsonlite::fromJSON(as.character(x)))
cbind(df, ldply(ll, data.frame))
# var1 var2 property1 property3 property2
#1 a {"property1": "val1", "property3": 8} val1 8 NA
#2 a {"property1": "val1", "property2": 5} val1 NA 5
数据:
df = structure(list(var11 = structure(c(1L, 1L), .Label = "a", class = "factor"),
var2 = structure(1:2, .Label = c("{\"property1\": \"val1\", \"property3\": 8}",
"{\"property1\": \"val1\", \"property2\": 5}"), class = "factor")), .Names = c("var1",
"var2"), class = "data.frame", row.names = 1:2)
你可以做:
library(plyr)
library(jsonlite)
ll = lapply(df$var2, function(x) jsonlite::fromJSON(as.character(x)))
cbind(df, ldply(ll, data.frame))
# var1 var2 property1 property3 property2
#1 a {"property1": "val1", "property3": 8} val1 8 NA
#2 a {"property1": "val1", "property2": 5} val1 NA 5
数据:
df = structure(list(var11 = structure(c(1L, 1L), .Label = "a", class = "factor"),
var2 = structure(1:2, .Label = c("{\"property1\": \"val1\", \"property3\": 8}",
"{\"property1\": \"val1\", \"property2\": 5}"), class = "factor")), .Names = c("var1",
"var2"), class = "data.frame", row.names = 1:2)
你可以做:
library(plyr)
library(jsonlite)
ll = lapply(df$var2, function(x) jsonlite::fromJSON(as.character(x)))
cbind(df, ldply(ll, data.frame))
# var1 var2 property1 property3 property2
#1 a {"property1": "val1", "property3": 8} val1 8 NA
#2 a {"property1": "val1", "property2": 5} val1 NA 5
数据:
df = structure(list(var11 = structure(c(1L, 1L), .Label = "a", class = "factor"),
var2 = structure(1:2, .Label = c("{\"property1\": \"val1\", \"property3\": 8}",
"{\"property1\": \"val1\", \"property2\": 5}"), class = "factor")), .Names = c("var1",
"var2"), class = "data.frame", row.names = 1:2)
你可以做:
library(plyr)
library(jsonlite)
ll = lapply(df$var2, function(x) jsonlite::fromJSON(as.character(x)))
cbind(df, ldply(ll, data.frame))
# var1 var2 property1 property3 property2
#1 a {"property1": "val1", "property3": 8} val1 8 NA
#2 a {"property1": "val1", "property2": 5} val1 NA 5
数据:
df = structure(list(var11 = structure(c(1L, 1L), .Label = "a", class = "factor"),
var2 = structure(1:2, .Label = c("{\"property1\": \"val1\", \"property3\": 8}",
"{\"property1\": \"val1\", \"property2\": 5}"), class = "factor")), .Names = c("var1",
"var2"), class = "data.frame", row.names = 1:2)
如果答案适合你,考虑投票/标记。如果答案适合你,考虑投票/标记。如果答案适合你,考虑投票/标记。如果答案适合你,考虑投票/标记。你的解决方案似乎起作用(它做了我的样本代码所期望的)。我怀疑我的完整数据集无法使用它,因为它无法处理属性集为空的情况。我最终在DB查询中提取了所需的属性,我也怀疑这最终会快得多。我怀疑我的完整数据集无法使用它,因为它无法处理属性集为空的情况。我最终在DB查询中提取了所需的属性,我也怀疑这最终会快得多。我怀疑我的完整数据集无法使用它,因为它无法处理属性集为空的情况。我最终在DB查询中提取了所需的属性,我也怀疑这最终会快得多。我怀疑我的完整数据集无法使用它,因为它无法处理属性集为空的情况。我最终在DB查询中提取了所需的属性,我也怀疑这最终会快得多。