按日期和变量对数据框进行排序

时间:2019-04-22 07:42:45

标签: r dataframe dplyr

我需要根据日期对以下数据框进行排序,并且Variables包含在同一列中。

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 个答案:

答案 0 :(得分:1)

一种选择是将Date列转换为实际日期,以便将文本转换为NA,而仅保留实际日期。现在我们可以将fill的那些NA与先前的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

答案 1 :(得分:0)

通过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