从大型列表中提取不同类型的变量

时间:2018-05-08 15:21:25

标签: r

让我们考虑一个列表元素(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'是具有相应值的三个变量。我的问题是如何提取和存储这三个变量的值作为三个不同的向量?谢谢你的帮助。

2 个答案:

答案 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")