在ldply中重命名.id列

时间:2013-03-21 16:29:45

标签: r plyr

有没有办法将自定义名称分配给.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

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

2 个答案:

答案 0 :(得分:4)

我有proposedimplementation,让我们看看它是否成为官方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')

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

> ldply(setNames(nm=1:3), function(i) data.frame(j=1/i), .id='i')

答案 1 :(得分: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