对data.frame中的元素进行排名

时间:2011-02-06 11:00:59

标签: r dataframe

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

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的编号排名,另一个计算y1之间排名的变化和y2(第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)
))

2 个答案:

答案 0 :(得分:6)

您还可以使用新的mutate功能,这样可以避免重新计算列:

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

答案 1 :(得分:3)

这对你有用吗?

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