2016-05-31 2 views
1

У меня есть таблица данных, как это:данные Подменит R после сортировки

 datetime   EquipmentNumber Count Raw 
1: 2012-11-28 16:00:00  100094233  1 2 
2: 2012-11-30 10:00:00  100094233  2 2 
3: 2012-11-30 11:00:00  100094233  0 0 

, и я хочу, чтобы получить самое высокие 100 Raw значения для каждого EquipmentNumber (есть 15)

Я отсортированный моих данных нисходящие и для каждого EquipmentNumber, как это:

vc.sorted <- VisitorCounters[order(EquipmentNumber, -Raw),] 

, но не знаю, как подмножество их, чтобы иметь таблицу данных, показывающую первые 100 значений Raw для каждого EquipmentNumber.

Благодарим за помощь.

+0

Как вы новичок в StackOverflow, если вы размещаете вопрос и получили ответы, которые хорошо работают на ваш вопрос, то лучше принять лучшее решение, нажав на отметку рядом с голосованием. – akrun

ответ

0

Мы можем сделать это с data.table (в качестве набора данных в OP является data.table) в компактной и более быстрым способом. Преобразуйте 'data.frame' в 'data.table' (setDT(VisitorCounters) - в случае, если это не data.table), сгруппированы по «Номер оборудования» и order «Сырье» в «i», мы получаем первые 100 строк с head.

library(data.table) 
VisitorCounters[order(-Raw), head(.SD, 100), by = Equipmentnumber] 

Или с помощью setorder

setorder(VisitorCounters, Equipmentnumber, -Raw)[, head(.SD, 100), by = Equipmentnumber] 

Использования воспроизводимого примера

set.seed(24) 
dt1 <- data.table(id = rep(1:3, each = 3), value = rnorm(9)) 
setorder(dt1, id,-value)[, head(.SD, 1), by = id] 
# id  value 
#1: 1 0.5365853 
#2: 2 0.8474600 
#3: 3 0.4445853 
0

Вы можете попробовать order и by. Отсоедините кадр данных на основе столбца Raw, а затем за каждые EquipmentNumber выберите 100 лучших строк.

mt <- VisitorCounters[order(VisitorCounters$Raw, decreasing = T), ] 
by(mt, mt["EquipmentNumber"], head, n=100) 
+0

Да, извините, это мой первый пост на этом сайте. Я пробовал сортировку с помощью «by», но я всегда получаю сообщение об ошибке. vc.sorted <- VisitorCounters [order (-Raw), by (["EquipmentNumber"], head, n = 100)] ' Ошибка: неожиданный' ['in "vc.sorted <- VisitorCounters [заказ (-Raw), by ([" Что стоит mt? – Kiwi95

+0

проверить первый шаг.' Mt' - это просто переменная, назначенная сортировке df. –

+1

Хорошо, я попробовал с вашим кодом и для mt ошибку «Ошибка в df $ Raw: объект типа« замыкание »не является подмножеством» – Kiwi95

1

Это можно легко сделать с dplyr пакета

library(dplyr) 
df %>% group_by(Equipmentnumber) %>% arrange(Raw, desc = T) %>% top_n(100)