在ldply(plyr)中缺少拆分标签

时间:2015-11-14 23:05:31

标签: r plyr

为什么在使用ldply或adlply时会丢失拆分标签。一个例子就是:

 ldply(c(200,300), function (x) data.frame(ab = rnorm(5, x, 3), cd = rnorm(5, x+5, 6)) )

这会生成以下数据框。

      ab       cd
1  199.4157 204.2111
2  196.3539 199.8178
3  200.1344 206.8755
4  199.5139 203.1514
5  205.3079 211.6156
6  300.5455 301.9101
7  298.5198 303.3942
8  296.8209 309.0427
9  300.9115 296.7305
10 302.0099 305.9254

我想要的是以下data.frame。

   .id    ab       cd
1  200  199.4157 204.2111
2  200  196.3539 199.8178
3  200  200.1344 206.8755
4  200  199.5139 203.1514
5  200  205.3079 211.6156
6  300  300.5455 301.9101
7  300  298.5198 303.3942
8  300  296.8209 309.0427
9  300  300.9115 296.7305
10 300  302.0099 305.9254

为什么plyr不再设置拆分标签?我使用adply做了这个,但做了同样的事。

1 个答案:

答案 0 :(得分:2)

ldply的文档中所述:

  

<强> .ID
  索引列的名称(如果.data是命名列表,则使用该名称)。传递NULL以避免创建索引列。为了兼容性,请省略此参数或传递NA以避免将索引列转换为因子;在这种情况下,“。id”用作列名。

因此,为了使其工作,您可以提供一个命名列表作为ldply的第一个参数。像这样:

ldply(list('200'=200,'300'=300), function(x) data.frame(ab = rnorm(5, x, 3), 
                                                        cd = rnorm(5, x+5, 6)))

这样你就可以得到你的id栏:

> ldply(list('200' = 200, '300' = 300), function (x) data.frame(ab = rnorm(5, x, 3), cd = rnorm(5, x+5, 6)) )

   .id       ab       cd
1  200 199.5737 206.9272
2  200 195.1648 209.4860
3  200 201.3358 207.6002
4  200 206.5642 211.2661
5  200 200.7969 194.2578
6  300 300.1042 311.7641
7  300 297.6136 292.2191
8  300 301.4618 302.5053
9  300 303.0787 299.6548
10 300 298.1153 302.7402