让我们考虑一个列表元素(g),其前五个元素打印为:
g[[1]][1:5]=
[1] {'count': 1, 'max': 492.0, 'sum': 492.0}
[2] {'count': 2159, 'max': 189.0, 'sum': 145109.0}
[3] {'count': 394, 'max': 2779.0, 'sum': 571383.0}
[4] {'count': 150, 'max': 1367.0, 'sum': 180339.0}
[5] {'count': 4, 'max': 1072055.0, 'sum': 2453038.0}
其中:
typeof(g[[1]][1:5])
[1] "integer"
这里$ g $是从python程序中获得的,现在我想用它作为我的R程序的输入。这里'count','max'和'sum'是具有相应值的三个变量。我的问题是如何提取和存储这三个变量的值作为三个不同的向量?谢谢你的帮助。
答案 0 :(得分:2)
使用jsonlite:
x <- c("{'count': 1, 'max': 492.0, 'sum': 492.0}",
"{'count': 2159, 'max': 189.0, 'sum': 145109.0}",
"{'count': 394, 'max': 2779.0, 'sum': 571383.0}",
"{'count': 150, 'max': 1367.0, 'sum': 180339.0}",
"{'count': 4, 'max': 1072055.0, 'sum': 2453038.0}")
library(jsonlite)
json <- c("[", toString(chartr("'", '"', x)), "]")
fromJSON(json)
给出这个数据框:
count max sum
1 1 492 492
2 2159 189 145109
3 394 2779 571383
4 150 1367 180339
5 4 1072055 2453038
这可以表示为以下管道:
library(jsonlite)
library(magrittr)
x %>%
chartr("'", '"', .) %>%
c("[", ., "]") %>%
fromJSON
答案 1 :(得分:1)
使用RJSONIO的解决方案,输出3个所需的向量(分离jsonlite以使用RJSONIO,因为它们具有相同的函数名称&#34; fromJSON&#34;但工作方式不同):
detach("package:jsonlite", unload=TRUE)
x <- c("{'count': 1, 'max': 492.0, 'sum': 492.0}",
"{'count': 2159, 'max': 189.0, 'sum': 145109.0}",
"{'count': 394, 'max': 2779.0, 'sum': 571383.0}",
"{'count': 150, 'max': 1367.0, 'sum': 180339.0}",
"{'count': 4, 'max': 1072055.0, 'sum': 2453038.0}")
library(RJSONIO)
toVector <- function(xdata, varname) {
return(unname(sapply(1:length(x), function(i){
fromJSON(x[i])[varname]
})))
}
mymax <- toVector(x, "max")
mycount <- toVector(x, "count")
mysum <- toVector(x, "sum")