在数据框中对元素进行排名

3

假设我有一个数据帧,像这样:

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)
))
2个回答

6
您也可以使用新的mutate函数,它可以避免重新计算列:
ddply(df, .(stat), mutate,
    y1rank = rank(y1),
    y2rank = rank(y2),
    change = y2rank - y1rank
)

哦,不知道这个。谢谢 Hadley!这可以应用于我写的许多使用 plyr 的代码。 - Brandon Bertelsen

3
这对您有用吗?
ddply(df, .(stat), transform,
    y1rank = rank(y1),
    y2rank = rank(y2),
    change = rank(y2) - rank(y1)
)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接