【问题标题】:Syntax in R regarding ddplyR 中关于 ddply 的语法
【发布时间】:2014-03-06 04:09:55
【问题描述】:

谁能解释为什么在以下 R 语句中playerID 之前会有一个句点?

dataframe.AB<-ddply(Batting, .(playerID), summarize, Career.AB=sum(AB, na.rm=TRUE))

我已经看到该参数通过 c(...) 函数传递了一些东西...不确定这里发生了什么。我应该提到playerIDBatting 数据帧中的一个变量。

谢谢。

【问题讨论】:

  • 我将其放在评论中,因为它不能直接回答您的问题,但我预计 dplyr 会出于诸如此类的目的超越 plyr(主要是由于速度)。在 dplyr 中,这将被写为 Batting %.% group_by(playerId) %.% summarise(Career.AB = sum(AB, na.rm = TRUE)) 。
  • help(".") 也是相关的。

标签: r syntax plyr


【解决方案1】:

这只有在你想使用表达式时才真正需要,例如.(playerID + 1).( 函数告诉 ddply 在数据上下文中捕获和评估表达式(在您的情况下为Batting)。如果您只想按未修改的列进行分组,您可以将该列的名称作为字符向量传递(例如 "playerID"c("playerID", "someOtherColumnName") 以按多列分组)。扩展我的评论,来自 plyr (p6-7) 上的 Hadley's vignette

在对数据框进行操作时,您通常希望根据数据集中变量的组合将其分成几组。对于 d*ply,您指定要使用的变量(或变量的函数)。这些变量以特殊方式指定,以突出它们首先从数据框中计算,然后是全局环境(在这种情况下,您有责任确保它们的长度等于数据框中的行数)。

.(var1) 会将数据框拆分为由 var1 变量的值定义的组。如果你使用多个变量,.(a, b, c),组将由变量的相互作用形成,输出将被所有三个变量标记...

您还可以使用变量函数:.(round(a)), .(a * b)。输出到数据框时,可能会产生丑陋的名称(由 make.names() 生成),但您可以通过在调用中指定名称来覆盖它们:.(product = a * b)。

或者,您可以使用两种更熟悉的方式来描述拆分: 作为列名的字符向量:c("var1", "var2")。

【讨论】:

    猜你喜欢
    • 2015-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-17
    • 2017-12-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多