簡體   English   中英

如何根據特定列的日期值對其重新排序?

[英]How can I reorder specific columns based on their date values?

我有一個腳本,它生成一個.csv輸出,如下所示:

在此處輸入圖片說明

但是,我有一個突出的問題:以日期命名的列並不總是按正確的順序排列。

我試圖按名稱對列進行排序,但這會影響前三列( retailerdepartmenttype ),前三列必須始終在前三列中。 發生這種情況是因為它們先按日期排序,然后再按字符值排序。

如何重新排列列的順序,以使前三列保持原樣,並以正確的順序獲取日期?

更新:

我可以按以下順序排列列,這是解決方案的第一部分:

sort(names(output))

在這種格式下,我現在需要將最后三列移到開頭(對於生成的每個數據幀,這始終是相同的,這樣就可以了)。

我該如何實現?

一種選擇是轉換為Date類,然后對其進行排序

# using a pattern, get the column index
i1 <- grep("^\\d{2}", names(df1))
# sort the extracted the column names after converting to 'Date' class
nm1 <-  names(df1)[i1][order(as.Date(names(df1)[i1], '%d/%m/%Y'))]
# get the names of the other columns
nm2 <- setdiff(names(df1), names(df1)[i1])
# concatenate the columns
df2 <- df1[c(nm2, nm1)]
df2
#    retailer department      type 22/03/2015 15/01/2017 25/07/2018 11/01/2019 12/01/2019
#1        1          a completed          4          1          2          4          1
#2        2          b completed          1          1          2          3          4
#3        3          c completed          5          1          2          2          3

數據

df1 <- data.frame(retailer = 1:3, department = letters[1:3], 
 type = 'completed', `11/01/2019` = c(4, 3, 2),
 `12/01/2019` = c(1, 4, 3), `15/01/2017` = 1,
 `25/07/2018` = 2, `22/03/2015` = c(4, 1, 5), check.names = FALSE)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM