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

标签 r split data.table

我需要对数据进行“拆分”以保留之前的订单,为此我使用了提供的 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/

相关文章:

r - 在 R 中选择满足某些条件的文件名

sql-server - 将数字分成几行,以便它们的总和等于原始数字

javascript - 在 javascript 中使用自定义条件分割字符串(不重复)

javascript - 如何将复杂的字符串分成几部分?

r - 如何将列列表传递给 data.table,其中一些是预先确定的

r - 使用 data.table 设置操作

r - 计算R中多边形和点之间的距离

r - ggplot2:如何使用 ggplot_build() 检查绘图的每个元素?

r - 当数据未格式化为表格时将数据导入 R 中

使用行过滤而不是读取+子集读取 `data.table`