按标题值对列进行排序

时间:2019-06-21 12:56:25

标签: r

我是R的新手,目前正试图摆脱对excel的依赖。我有一个要清理的文件,清理过程的最后一步是按标题值对列进行排序。标头包含以下值:

  

“ 2019年8月”,“ 2019年10月”,“ 2020年2月”,“ 2020年3月”,“ 6月”   2019“,2019年7月等,......”

我无法确切地说出可能存在多少列,因为每个文件的不同。

如您所见,它们并不是按任何特定顺序排列的。有没有一种方法可以按升序组织列?任何指导将不胜感激。

2 个答案:

答案 0 :(得分:0)

一种选择是将列名称转换为日期,然后//REGISTER.PHP // Prepare an insert statement $sql = "INSERT INTO users (username, password) VALUES (?, ?)"; if($stmt = mysqli_prepare($conn, $sql)){ // Bind variables to the prepared statement as parameters mysqli_stmt_bind_param($stmt, "ss", $param_username, $param_password); $param_username = $username; $param_password = $password; // Creates a password hash //LOGIN.PHP // Bind result variables mysqli_stmt_bind_result($stmt, $id, $username, $db_password); //COMPARE FORM PASSWORD and PASSWORD FROM DB if($password == $db_password)) { ...

order

添加可复制的示例

df[order(as.Date(paste0("01.", names(df)), "%d.%B.%Y"))]

看起来像这样

df <- structure(list(August.2019 = c(1L, 5L), October.2019 = 2:3, 
      February.2020 = 3:2, March.2020 = c(4L, 1L), June.2019. = c(5L, 2L), 
      July.2019 = c(6L,1L)), class = "data.frame", row.names = c(NA, -2L))

我们可以使用将df # August.2019 October.2019 February.2020 March.2020 June.2019. July.2019 #1 1 2 3 4 5 6 #2 5 3 2 1 2 1 df[order(as.Date(paste0("01.", names(df)), "%d.%B.%Y"))] # June.2019. July.2019 August.2019 October.2019 February.2020 March.2020 #1 5 6 1 2 3 4 #2 2 1 5 3 2 1 / lubridateanytime中的其他软件包中的功能转换为日期的相同逻辑。

答案 1 :(得分:0)

我们可以使用setcolorder中的data.table

library(zoo)
library(data.table)
setcolorder(df, order(as.yearmon(names(df), "%b.%Y")))
df
#  June.2019. July.2019 August.2019 October.2019 February.2020 March.2020
#1          5         6           1            2             3          4
#2          2         1           5            3             2          1

数据

df <- structure(list(August.2019 = c(1L, 5L), October.2019 = 2:3, 
      February.2020 = 3:2, March.2020 = c(4L, 1L), June.2019. = c(5L, 2L), 
      July.2019 = c(6L,1L)), class = "data.frame", row.names = c(NA, -2L))