2017-01-03 2 views
0

У меня есть следующие данные:Перестановка строк данных с одинаковым значением

Data <- data.frame(Project=c(123,123,123,123,123,123,124,124,124,124,124,124), 
       Date=c("12/27/2016 15:16","12/27/2016 15:20","12/27/2016 15:24","12/27/2016 15:28","12/27/2016 15:28","12/27/2016 15:42","12/28/2016 7:22","12/28/2016 7:26","12/28/2016 7:35","12/28/2016 11:02","12/28/2016 11:02","12/28/2016 11:28"), 
       OldValue=c("","Open","In Progress","Open","System Declined","In Progress","System Declined","Open","In Progress","Open","Complete","In Progress"), 
       NewValue=c("Open","In Progress","System Declined","In Progress","Open","System Declined","Open","In Progress","Complete","In Progress","Open","Complete")) 

данные уже отсортированы по проекту, а затем дату.

Однако, если есть две строки с одной и той же датой (например, строки 4,5 и 10,11), я хочу назначить заказ на основе OldValue. Поэтому я бы хотел, чтобы ряд 5 был впереди строки 4, а строка 11 впереди строки 10.

Как я могу это сделать?

+0

Заказ в алфавитном порядке приведет к различным результатам, если «OldValue» является фактором. –

+0

Я пробовал заказывать свои данные по проекту, дате, OldValue и по большей части, что работает. Однако есть примеры, как в приведенном выше примере, где это не сработает, то есть строки 4,5 – Dfeld

ответ

2
#Assign Desired order to the OldValue, CHANGE "y" IF NECESSARY 
OldValue_order = data.frame(OldValue = c("","Open","In Progress","System Declined","Complete"), y = c(0,4,2,1,3)) 

# We'll need lookup command to copy desired order to the "Data" 
library(qdapTools) 
Data$OV_order = lookup(Data$OldValue, OldValue_order) # Adds new column to "Data" 

# Arrange the data.frame in desired order 
Data = Data[with(Data, order(Project, as.POSIXct(Date, format = "%m/%d/%Y %H:%M"), OV_order)),] 

#Remove the added column 
Data = Data[1:4] 
Смежные вопросы