gpt4 book ai didi

R:如何更改 data.table 列表的项目(或对象)名称?

转载 作者:行者123 更新时间:2023-12-02 11:34:12 24 4
gpt4 key购买 nike

我需要对数据进行“拆分”以保留之前的订单,为此我使用了提供的 data.table 解决方案 here 。我将数据“拆分”为两列。请参阅下面的示例:

df = data.frame(product = c("b", "a", "b", "a"),
value = c(sample(1:10,4)),
year = c(2001, 2001, 2000, 2000))

require(data.table)
dt <- data.table(df)
dt[, grp := .GRP, by = list(product,year)]
setkey(dt, grp)
o2 <- dt[, list(list(.SD)), by = grp]$V1

此代码返回列表,而不按字母或数字重新排序。但是,我想将项目名称更改为产品和年份的组合。

> o2
[[1]]
product value year
1: b 3 2001

[[2]]
product value year
1: a 8 2001

[[3]]
product value year
1: b 4 2000

[[4]]
product value year
1: a 7 2000

预期结果应如下所示:

> o2
$b.2001
product value year
1: b 3 2001

$a.2001
product value year
1: a 8 2001

$b.2000
product value year
1: b 4 2000

$a.2000
product value year
1: a 7 2000

另一种分割技术也可以,但我需要保留之前的顺序。感谢您的想法

最佳答案

这是我目前的处理方法。

require(data.table)
tmp = setDT(df)[, list(grp=list(.SD)), by=.(product, year), .SDcols=names(df)]
setattr(ans <- tmp$grp, 'names', paste(tmp$product, tmp$year, sep="."))
ans
# $b.2001
# product value year
# 1: b 7 2001
#
# $a.2001
# product value year
# 1: a 3 2001
#
# $b.2000
# product value year
# 1: b 10 2000
#
# $a.2000
# product value year
# 1: a 9 2000

我添加了 FR #1389提供一种 split.data.table 方法,通过该方法可以一步完成此操作。

但在大多数情况下,处理一个data.frame/data.table比处理一个列表更容易。因此,更深入地了解您的下游任务可能有助于确定这是否真的有必要。

关于R:如何更改 data.table 列表的项目(或对象)名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33068791/

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