gpt4 book ai didi

r - 根据一列的值合并数据

转载 作者:行者123 更新时间:2023-12-03 00:06:39 25 4
gpt4 key购买 nike

我有一个 R 数据框

     year group  sales
1 2000 1 20
2 2001 1 25
3 2002 1 23
4 2003 1 30
5 2001 2 50
6 2002 2 55

我想按组对数据进行分组或创建某种对象。我想为每个组创建一个数组来存储年份和销售额。我将尝试将其保存为具有以下结构的 json 文件:

[{"group": 1, "sales":[[2000,20],[2001, 25], [2002,23], [2003, 30]]},
{"group": 2, "sales":[[2001, 50], [2002,55]]}]

可以自动完成吗?

非常感谢

最佳答案

我们可以使用data.table粘贴按“group”分组的“year”和“sales”列。我们将“data.frame”转换为“data.table”(setDT(df1))。按“组”分组,我们使用 sprintf 将“年份”、“销售额”与括号 ([]) 一起粘贴,然后将输出折叠为单个字符串使用 toString (它是 paste(...,collapse=', ') 的包装器),paste[] ,并使用toJSON

library(jsonlite)
library(data.table)
toJSON(setDT(df1)[, list(sales= paste0('[',toString(sprintf('[%d,%d]',
year, sales)),']')), by = group])
#[{"group":1,"sales":"[[2000,20], [2001,25], [2002,23], [2003,30]]"},
#{"group":2,"sales":"[[2001,50], [2002,55]]"}]
<小时/>

可以使用base R按组进行粘贴。我们按“组”列拆分数据集来创建一个列表。使用上面提到的 lapplypaste、“year”、“sales”列循环遍历 list。使用“group”的第一个元素和 paste 步骤中的字符串创建一个 data.framerbind list 元素创建单个 data.frame,然后使用 toJSON

toJSON(
do.call(rbind,
lapply(
split(df1, df1$group),
function(x) data.frame(group=x$group[1L],
sales=paste0('[',
toString(sprintf('[%d,%d]', x$year, x$sales)),
']')))))

数据

df1 <- structure(list(year = c(2000L, 2001L, 2002L, 2003L, 2001L, 2002L
), group = c(1L, 1L, 1L, 1L, 2L, 2L), sales = c(20L, 25L, 23L,
30L, 50L, 55L)), .Names = c("year", "group", "sales"),
class = "data.frame", row.names = c(NA, -6L))

关于r - 根据一列的值合并数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32310373/

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