Сортировать фрейм данных по дате и переменной - PullRequest
0 голосов
/ 22 апреля 2019

Мне нужно отсортировать приведенный ниже фрейм данных на основе даты и переменной, состоящей из одного столбца.

DF

Date            Value
2019-01-01      445
AER_ST          220
BER_TT          225
2019-01-02      100
AER_ST          75
BER_TT          25

Я хочу DF в указанном ниже формате с последней датойпо убыванию.

DF2

Date              Value
2019-01-02        100
AER_ST            75
BER_TT            25
2019-01-01        445
AER_ST            220
BER_TT            225

Я попробовал ниже упомянутый метод.

DF$new<-ifelse(Output$Date=='AER_ST',1,
                    ifelse(Output$Date=='BER_TT',2,0))

DF2<-arrange(DF, desc(Date), desc(new))

Ответы [ 2 ]

1 голос
/ 22 апреля 2019

Один из вариантов - преобразовать столбец Date в фактические даты, чтобы текст был преобразован в NA, и остались только фактические даты. Теперь мы можем fill эти NA s с предыдущими значениями Date и arrange эти даты в порядке убывания.

library(dplyr)

df %>%
  mutate(Date1 = as.Date(Date)) %>%
  tidyr::fill(Date1) %>%
  arrange(desc(Date1)) %>%
  select(-Date1)


#        Date Value
#1 2019-01-02   100
#2     AER_ST    75
#3     BER_TT    25
#4 2019-01-01   445
#5     AER_ST   220
#6     BER_TT   225
0 голосов
/ 22 апреля 2019

Возможность через Base R можно разделить на основе дат, порядка, перегруппировки списка и rbind, то есть

l1 <- split(df, cumsum(!is.na(as.Date(df$Date, '%Y-%m-%d'))))
i1 <- order(as.Date(sapply(l1, function(i) i$Date[1]), '%Y-%m-%d'), decreasing = TRUE)
do.call(rbind, l1[i1])

, что дает

          Date Value
2.4 2019-01-02   100
2.5     AER_ST    75
2.6     BER_TT    25
1.1 2019-01-01   445
1.2     AER_ST   220
1.3     BER_TT   225
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...