Ранжирование элементов в рамках data.frame - PullRequest
3 голосов
/ 06 февраля 2011

Допустим, у меня есть фрейм данных, например:

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" я хотел бы создать три новых столбца, один из которых отображает пронумерованный ранг для y1 и y2, а другой - для вычисления изменения ранга между 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 ]

6 голосов
/ 07 февраля 2011

Вы также можете использовать новую функцию mutate, которая избавляет вас от пересчета столбцов:

ddply(df, .(stat), mutate,
    y1rank = rank(y1),
    y2rank = rank(y2),
    change = y2rank - y1rank
)
3 голосов
/ 06 февраля 2011

Будет ли это работать для вас?

ddply(df, .(stat), transform,
    y1rank = rank(y1),
    y2rank = rank(y2),
    change = rank(y2) - rank(y1)
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...