简体   繁体   English

如何在R中将数据框转换为具有多个列的json

[英]how do you convert data frame to json with multiple columns in R

I need to convert aa data frame to a json format, my data frame looks like this: 我需要将一个数据框转换为json格式,我的数据框如下所示:

dput(head(yyy,30))
structure(list(name = c("serverA", "serverA", "serverA", "serverA", 
"serverA", "serverA", "serverA", "serverA", "serverA", "serverA", 
"serverA", "serverA", "serverA", "serverA", "serverA", "serverA", 
"serverA", "serverA", "serverA", "serverA", "serverA", "serverA", 
"serverA", "serverA", "serverA", "serverA", "serverA", "serverA", 
"serverA", "serverA"), date = structure(c(1374120000, 1374120060, 
1374120120, 1374120180, 1374120360, 1374120420, 1374120540, 1374120600, 
1374120840, 1374120960, 1374121020, 1374121080, 1374121200, 1374121440, 
1374121500, 1374121620, 1374121680, 1374122040, 1374122160, 1374122280, 
1374122400, 1374122580, 1374122640, 1374122700, 1374122940, 1374123000, 
1374123120, 1374123180, 1374123240, 1374123360), class = c("POSIXct", 
"POSIXt"), tzone = "America/New_York"), resp = c(3644, 1067.5, 
2738, 5224, 561, 723, 522, 408.5, 446, 683.75, 521, 385, 2666.5, 
1268, 701, 143, 645, 474, 670.5, 549, 383, 1381, 483, 516, 467.5, 
10726, 931.5, 773, 778, 323), vol = c(1L, 2L, 1L, 1L, 1L, 1L, 
1L, 2L, 2L, 4L, 1L, 1L, 2L, 1L, 1L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 
1L, 1L, 2L, 1L, 2L, 2L, 1L, 1L)), .Names = c("name", "date", 
"resp", "vol"), row.names = c(1L, 3L, 7L, 8L, 13L, 17L, 21L, 
25L, 33L, 39L, 42L, 44L, 48L, 59L, 63L, 68L, 71L, 83L, 88L, 91L, 
98L, 105L, 109L, 113L, 122L, 123L, 129L, 132L, 135L, 140L), class = "data.frame")

my json needs to be like this: 我的json需要像这样:

first part will include date and resp and second part will need to inclue date and vol on the json format. 第一部分将包括日期和响应,第二部分将需要包括日期和vol的json格式。

[{"name":"serverA","yAxis":1, "data":[[<date>,<resp>],[<date>,<resp>]]},{"name":"serverA","yAxis":2, "data":[[<date>,<vol>],[<date>,<vol>]]}]

the json out put needs to be like this: json输出必须像这样:

[{"name":"serverA","yAxis":1, "data":[[1374105840000,27.395],[1374107640000,26.646]]},{"name":"serverA","yAxis":2, "data":[[1374105840000,25.983],[1374107640000,22.724]]}]

If the data frame only include resp, I could do something like to this convert this: 如果数据帧仅包含resp,则可以执行以下操作:

servers <- split(yyy, yyy$name)
dumFun <- function(x){
  sData <- servers[x][[1]]
  if(nrow(sData) >0){
    # create appropriate list
    dumList <- unname(apply(sData[,2:3], 1, function(y) unname(as.list(y))))
    return(toJSON(list(name = x, data = dumList))) 
  }
}


jsData <- lapply(names(servers), dumFun)
jsInd <- sapply(jsData, is.null)
p<-paste0('[', paste(jsData[!jsInd], collapse = ','), ']')

is there an easy way to do this in R 有一个简单的方法可以在R中做到这一点

Your sample data doesn't include some of the variables you requested in the output, but I think this should work for you. 您的样本数据不包含您在输出中请求的某些变量,但是我认为这应该对您有用。

library(rjson)

toJSON(data.frame(t(yyy)))

I was able to do this in two steps as follows: 我能够按照以下两个步骤进行操作:

dumFun <- function(x){
          sData <- servers[x][[1]]
          if(nrow(sData) >0){
            # create appropriate list
            dumList <- unname(apply(sData[,2:3], 1, function(y) unname(as.list(y))))
            return(toJSON(list(name = x, yAxis=1, data = dumList))) 
          }
        }

        dumFun1 <- function(x){
          sData <- servers[x][[1]]

          if(nrow(sData) >0){
            # create appropriate list
            dumList <- unname(apply(sData[,c(2,4)], 1, function(y) unname(as.list(y))))
            return(toJSON(list(name = x, yAxis=2, data = dumList))) 
          }
        }

        jsData <- lapply(names(servers), dumFun)
        jsInd <- sapply(jsData, is.null)

        jsData1 <- lapply(names(servers), dumFun1)
        jsInd <- sapply(jsData, is.null)

        t<-paste(jsData, jsData1, sep=',')

        p<-paste0('[', paste(t[!jsInd], collapse = ','), ']')

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM