【问题标题】:Missing split labels in ldply (plyr)ldply (plyr) 中缺少拆分标签
【发布时间】:2016-02-16 07:33:11
【问题描述】:

为什么我们使用 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 完成了此操作,但效果相同。

【问题讨论】:

  • 我不使用 plyr 等,但为什么不手动操作...更改为 data.frame(id=x, ab = ...
  • 我希望它自动化并减少编码行数。
  • 很公平,虽然我认为这比创建命名输入向量的编码要少一些,但是西红柿 tomaetoes

标签: r plyr


【解决方案1】:

正如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

【讨论】:

    猜你喜欢
    • 2011-12-07
    • 2020-11-30
    • 2021-05-05
    • 1970-01-01
    • 2015-10-12
    • 2015-08-16
    • 1970-01-01
    • 2020-10-27
    • 1970-01-01
    相关资源
    最近更新 更多