2013-07-18 30 views
0

多列,我需要AA數據幀轉換成JSON格式的JSON,我的數據幀是這樣的:你如何轉換數據幀與R中

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

的json需要是這樣的:

第一部分將包含date和resp,第二部分將需要包含json格式的日期和卷。

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

的JSON出認沽需要是這樣的:

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

如果數據幀僅包括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 = ','), ']') 

是有一個簡單的方法可以在R

+0

這是否http://stackoverflow.com/a/15138399/429846回答你的問題? –

+0

您發佈的樣本數據中沒有yaxis變量 –

+0

另外,我之前見過你發佈過問題,並且總是使用非常非常奇怪的方法來構建您的樣本數據。你爲什麼不使用簡單的'data.frame'方法而不是''.name''和'rownames'屬性以及'class =「data.frame」''使用'structure'?你的代碼通常是非R的,我想確保你知道有很多簡單的方法可以完成許多你想要完成的事情(比如創建一個簡單的數據框)。 –

回答

0

我能夠做到這兩個步驟如下:

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 = ','), ']') 
0

您的示例數據不包含您請求的一些變量在輸出中,但我認爲這應該適合你。

library(rjson) 

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