任何人都可以解释为什么在下面的R语句中playerID
之前会有一段时间吗?
dataframe.AB<-ddply(Batting, .(playerID), summarize, Career.AB=sum(AB, na.rm=TRUE))
我已经看到这个论点传递了一些c(...)函数...不知道这里发生了什么。我应该提到playerID
是Batting
数据框中的变量。
感谢。
答案 0 :(得分:4)
如果您想使用表达式,例如.(playerID + 1)
,这才是必要的。 .(
函数告诉ddply捕获并评估数据上下文中的表达式(在您的情况下为Batting
)。如果您只想按未修改的列进行分组,则可以将该列的名称作为字符向量传递(例如"playerID"
,或c("playerID", "someOtherColumnName")
按多列分组)。要扩展我的评论,请从plyr上的Hadley's vignette(p6-7):
在数据框上操作时,通常需要根据数据集中的变量组合将其拆分为多个组。对于d * ply,您可以指定要使用的变量(或变量函数)。这些变量以特殊方式指定,以突出显示它们首先从数据框计算,然后是全局环境(在这种情况下,您有责任确保它们的长度等于数据框中的行数)。
。(var1)将数据帧拆分为由var1变量的值定义的组。如果你使用多个变量,。(a,b,c),这些组将由变量的相互作用形成,输出将用所有三个变量标记......
您还可以使用变量函数:。(round(a)),.(a * b)。输出到数据框时,可能会产生丑陋的名称(由make.names()生成),但您可以通过在调用中指定名称来覆盖它们:。(product = a * b)。
或者,您可以使用两种更熟悉的方式来描述拆分: 作为列名的字符向量:c(&#34; var1&#34;,&#34; var2&#34;)。