4

有没有办法为通常.id在结果中命名的列分配自定义名称ldply

> ldply(setNames(1:3, 1:3), function(i) data.frame(j=1/i))
  .id         j
1   1 1.0000000
2   2 0.5000000
3   3 0.3333333

我知道我可以调用rename结果,但我想一次性完成。有什么建议么?

请注意,adply遇到类似的问题:

> adply(as.array(setNames(1:3, 1:3)), 1, function(i) data.frame(j=1/i))
  X1         j
1  1 1.0000000
2  2 0.5000000
3  3 0.3333333

另一个相关问题解决了重命名“数据”列的问题,但答案也未能为该.id列提供解决方案。

4

2 回答 2

4

我已经提出了一个实现,让我们看看它是否会成为官方plyr的。基本上,一个.idname允许指定.id列名称的新参数,可以通过传递来完全删除它NULL

> ldply(setNames(1:3, 1:3), function(i) data.frame(j=1/i), .idname='i')
  i         j
1 1 1.0000000
2 2 0.5000000
3 3 0.3333333

. 使用安装调整后的版本

library(devtools)
install_github('plyr', 'krlmlr', ref='140-142-id')

编辑:这现在plyr在 CRAN 的 1.8.1 中可用:

> ldply(setNames(nm=1:3), function(i) data.frame(j=1/i), .id='i')
于 2013-03-21T22:52:49.053 回答
3

您似乎很喜欢使用 setNames,因此您可以将“j”和“newname”分配到一个方便的包装器中。

setNames( ldply(setNames(1:3, 1:3), function(i) data.frame(1/i)) , c("newname", "j") )
  newname         j
1       1 1.0000000
2       2 0.5000000
3       3 0.3333333
于 2013-03-21T16:48:53.237 回答