gpt4 book ai didi

从 R 中的分组数据帧 reshape JSON 输出

转载 作者:行者123 更新时间:2023-12-04 04:36:08 24 4
gpt4 key购买 nike

我有一个 R 数据框的形式:

Country Region  Year    V1  V2
AAAA XXXX 2001 12 13
BBBB YYYY 2001 14 15
AAAA XXXX 2002 36 56
AAAA XXXX 1999 45 67

并想生成一个等效于以下形式的 JSON:
[
{"Country": "AAAA",
"Region":"XXXX",
"V1": [ [1999,45], [2001,12] , [2002,36] ],
"V2":[ [1999,67], [2001,13] , [2002,56] ]
},
{"Country": "BBBB",
"Region":"YYYY",
"V1":[ [2001,14] ],
"V2":[ [2001,15] ]
}
]

我想象这需要:
  • 按国家和地区分组
  • 按组内的年份排序
  • 对于 V1、V2 中剩余的每一列 Vx(可以具有任意名称的任意数量的列),生成一个包含列表元素 [Year, Vx] 的列表,对于有序的 Year

  • 但正在努力寻找方法吗?

    最佳答案

    这是执行此操作的另一种方法。

    dat <- read.table(textConnection("Country Region  Year    V1  V2
    AAAA XXXX 2001 12 13
    BBBB YYYY 2001 14 15
    AAAA XXXX 2002 36 56
    AAAA XXXX 1999 45 67"), header = TRUE)

    我们将两个辅助函数添加到一起压缩向量,以及一个自定义排序函数,该函数按给定位置的元素对列表进行排序。
    #' Pluck element
    pluck_ = function (element){
    function(x) x[[element]]
    }

    #' Zip two vectors
    zip_ <- function(..., names = F){
    x = list(...)
    y = lapply(seq_along(x[[1]]), function(i) lapply(x, pluck_(i)))
    if (names) names(y) = seq_along(y)
    return(y)
    }

    #' Sort a vector based on elements at a given position
    sort_ <- function(v, i = 1){
    v[sort(sapply(v, '[[', i), index.return = T)$ix]
    }

    是时候把东西放在一起并使用 split-apply-combine获得您寻求的输出的魔法。
    library(plyr)
    dat2 <- dlply(dat, .(Country, Region), function(d){
    list(
    Country = d$Country[1],
    Region = d$Region[1],
    V1 = sort_(zip_(d$Year, d$V1)),
    V2 = sort_(zip_(d$Year, d$V2))
    )
    })
    cat(rjson::toJSON(setNames(dat2, NULL)))

    这给你输出
    [
    {"Country":"AAAA",
    "Region":"XXXX",
    "V1":[[1999,45],[2001,12],[2002,36]],
    "V2":[[1999,67],[2001,13],[2002,56]]
    },
    {"Country":"BBBB",
    "Region":"YYYY",
    "V1":[[2001,14]],
    "V2":[[2001,15]]
    }
    ]

    关于从 R 中的分组数据帧 reshape JSON 输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19727035/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com