ddply in r - 如何通过列索引引用变量

时间:2012-12-11 17:48:22

标签: r plyr

假设我有一个包含许多列的数据框以及我希望应用的特定摘要过程。可能有几列我感兴趣的总结,例如, baseball数据集的第2,3和4列:

   ddply(baseball, .(year), "nrow")
   ddply(baseball, .(stint), "nrow")
   ddply(baseball, .(team), "nrow")

当然,我可能希望应用更复杂的摘要并有更多的输出列,但我们坚持认为摘要将由单个列完成,并且有几列我不妨总结一下。因此,让我们为摘要编写一个函数,这样我就可以轻松改变用于。(var)的列:

   baseballByCol <- function(col) {
       ddply(baseball, .(baseball[,col]), "nrow")
   }

此ALMOST有效:baseballByCol(2)ddply(baseball, .(year), "nrow")的输出相同,除了colnames(baseballByCol(2))c("baseball[, col]", "nrow"),而colnames(ddply(baseball, .(year), "nrow"))是所需的c("year", "nrow") }。

当然我们可以解决这个问题:

   baseballByCol <- function(col) {
       df <- ddply(baseball, .(baseball[,col]), "nrow")
       colnames(df)[1] <- colnames(baseball)[col]
       return(df)
   }

现在baseballByCol(2)ddply(baseball, .(year), "nrow")的输出完全相同,通过stint汇总我可以使用baseballByCol(3)等等。

但这闻起来有点难看。真的没有更好的方式来引用&#34; by&#34;变量的列索引而不是名称,而.(baseball[,col]), "nrow")除了混淆列名?

是否有一个更清晰的解决方案,其中函数将变量名称作为参数而不是列索引?

1 个答案:

答案 0 :(得分:3)

baseballByCol <- function(col) {
    ddply(baseball, col, "nrow")
}

使用索引和列名称。