假设我有一个包含许多列的数据框以及我希望应用的特定摘要过程。可能有几列我感兴趣的总结,例如, 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")
除了混淆列名?
是否有一个更清晰的解决方案,其中函数将变量名称作为参数而不是列索引?
答案 0 :(得分:3)
baseballByCol <- function(col) {
ddply(baseball, col, "nrow")
}
使用索引和列名称。