![](/img/trans.png)
[英]How can I reorder columns in a dataframe based on median value in R?
[英]How can I reorder specific columns based on their date values?
我有一個腳本,它生成一個.csv輸出,如下所示:
但是,我有一個突出的問題:以日期命名的列並不總是按正確的順序排列。
我試圖按名稱對列進行排序,但這會影響前三列( retailer
, department
, type
),前三列必須始終在前三列中。 發生這種情況是因為它們先按日期排序,然后再按字符值排序。
如何重新排列列的順序,以使前三列保持原樣,並以正確的順序獲取日期?
更新:
我可以按以下順序排列列,這是解決方案的第一部分:
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.