【问题标题】:Ranking elements within a data.frame对 data.frame 中的元素进行排名
【发布时间】:2011-06-22 05:20:30
【问题描述】:

假设我有一个数据框,如下所示:

df <- data.frame(
  variable = rep(letters[1:10], 2),
  y2 = 1:10,
  y1 = c(10, 9, 8 ,7, 6, 5, 4, 2, 1, 3),
  stat = c(rep(letters[1], 10), rep(letters[2], 10))
)

通过“stat”,我想创建三个新列,一个显示y1y2 的编号排名,另一个计算y1y2 之间的排名变化(短第 1 年和第 2 年)。

我一直在修改ddply,但我似乎无法让它做我想做的事。这是我尝试过的一个示例(这也可以说明我正在尝试做的事情):

ddply(df, .(stat), function(x) data.frame(
  df,
  y1rank = rank(x$x),
  y2rank = rank(x$y),
  change = rank(x$y) - rank(x$x)
))

【问题讨论】:

    标签: r dataframe


    【解决方案1】:

    您还可以使用新的mutate 函数,让您不必重新计算列:

    ddply(df, .(stat), mutate,
        y1rank = rank(y1),
        y2rank = rank(y2),
        change = y2rank - y1rank
    )
    

    【讨论】:

    • 噢,不知道那个。谢谢哈德利!这可以应用于我编写的许多使用 plyr 的代码
    【解决方案2】:

    这对你有用吗?

    ddply(df, .(stat), transform,
        y1rank = rank(y1),
        y2rank = rank(y2),
        change = rank(y2) - rank(y1)
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多