为什么在使用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做了这个,但做了同样的事。
答案 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