Выбор строк и упорядочение результата в R - PullRequest
4 голосов
/ 01 февраля 2011

Казалось бы, тривиальная задача - выбрать строки во фрейме данных и затем упорядочить их - ускользает от меня и в то же время сводит меня с ума.Например, у нас есть тривиальный фрейм данных:

country = c("US", "US", "CA", "US")
company = c("Apple", "Google", "RIM", "MS")
vals = c(100, 70, 50, 90)
df <- data.frame(country, company, vals)

Позволяет упорядочить его по значениям

> df[order(vals),]
  country company vals
3      CA     RIM   50
2      US  Google   70
4      US      MS   90
1      US   Apple  100

Работает отлично.Теперь попробуем выбрать только американские компании и упорядочить там значения.Мы получаем несколько фиктивных результатов.

> df[country=="US", ][order(vals),]
    country company vals
4       US      MS   90
2       US  Google   70
NA    <NA>    <NA>   NA
1       US   Apple  100

Позволяет упорядочить, а затем выбрать.Опять же, фиктивный результат

> df[order(vals),][country=="US", ]
  country company vals
3      CA     RIM   50
2      US  Google   70
1      US   Apple  100

Как получить фрейм данных, который включает в себя только американские компании, и отсортирован по val?

Ответы [ 3 ]

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

Не уверен, что вы можете сделать это с помощью набора вызовов поднабора до [, так как вам нужно сослаться на упорядоченный или уменьшенный кадр данных при втором вызове поднабора. Один из способов - упорядочить данные и предоставить их subset(), чтобы выбрать строки из этого упорядоченного фрейма данных:

> with(df, subset(df[order(vals),], subset = country == "US"))
  country company vals
2      US  Google   70
4      US      MS   90
1      US   Apple  100
6 голосов
/ 01 февраля 2011

Мне всегда было странно, что для базы R не было удобного переупорядочения фрейма данных, как для поднабора.Поэтому я написал свой:

library(plyr)
arrange(subset(df, country == "US"), vals)
1 голос
/ 01 февраля 2011
> df[df$country=="US",][order(df[df$country=="US","vals"]),]
  country company vals
2      US  Google   70
4      US      MS   90
1      US   Apple  100

Я считаю хорошей привычкой удалять исходные переменные и просто работать с фреймом данных (поэтому df $ country вместо country).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...