【问题标题】:renaming the output column with the plyr package in R使用 R 中的 plyr 包重命名输出列
【发布时间】:2010-11-26 14:04:50
【问题描述】:

Hadley 让我使用 plyr 包,我发现自己一直在使用它来做“分组”之类的事情。但我发现自己必须始终重命名结果列,因为它们默认为 V1、V2 等。

这是一个例子:

mydata<-data.frame(matrix(rnorm(144, mean=2, sd=2),72,2),c(rep("A",24),rep("B",24),rep("C",24)))
colnames(mydata) <- c("x_value", "acres",  "state")
groupAcres <- ddply(mydata, c("state"), function(df)c(sum(df$acres)))
colnames(groupAcres) <- c("state","stateAcres")

有没有办法让 ddply 为我命名结果列,以便我可以省略最后一行?

【问题讨论】:

  • JD- 第一行代码没有运行,应该是 rnorm(...,72,2),例如:mydata
  • 好收获!我编辑了我的例子。谢谢!

标签: r plyr


【解决方案1】:

这似乎有效:

> groupAcres <- ddply(mydata, c("state"), function(df) c(myName=sum(df$acres)))
> groupAcres
  state   myName
1     A 56.87973
2     B 57.84451
3     C 52.82415

【讨论】:

  • 我在没有真正理解 R 语法的情况下混淆了它。为什么需要连接函数?
  • @Farrel:为数据项命名。使用 data.frame 也可以。
【解决方案2】:

使用summary(或summary):

  groupAcres <- ddply(mydata, "state", summarise, 
     myName = sum(acres))

【讨论】:

  • 这是解决这个问题的好方法。我选择克里斯的答案只是因为它更笼统。我以后会用他的方法和你的方法。我希望我可以将它们合并或同时接受它们
  • 我的方法实际上更通用一些(因为如果你返回多种类型,它们可以有不同的类型)。我为这个用途写了总结。
  • 我无法使用此方法,因为我正在使用 nrow 函数对子集数据中的行数求和,有什么提示吗?
  • @mindless.panda 您始终可以在子集数据的列上使用length,而不是nrow:ddply(mydata, .(state), summarize, count.per.state=length(acres))。 (如果你不关心列名,你可以使用nrow作为聚合函数,但这与本帖的目的背道而驰。)
猜你喜欢
  • 2013-06-09
  • 1970-01-01
  • 1970-01-01
  • 2015-06-24
  • 2020-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-29
相关资源
最近更新 更多