Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何根据特定列的日期值对其重新排序?_R_Sorting - Fatal编程技术网

R 如何根据特定列的日期值对其重新排序?

R 如何根据特定列的日期值对其重新排序?,r,sorting,R,Sorting,我有一个生成.csv输出的脚本,如下所示: 但是,我强调了一个问题:日期列的顺序并不总是正确的 我尝试按名称对列进行排序,但这会影响前三列(零售商,部门,类型),它们必须始终位于前三列中。这是因为它们首先按日期排序,然后按字符值排序 如何对列进行重新排序,使前三列保持原样,并以正确的顺序获取日期 更新: 我可以像这样对列进行排序,这是解决方案的第一部分: sort(names(output)) 在这种格式中,我现在需要将最后三列移到开头(对于生成的每个数据帧,这将始终是相同的,这样就可以了)

我有一个生成.csv输出的脚本,如下所示:

但是,我强调了一个问题:日期列的顺序并不总是正确的

我尝试按名称对列进行排序,但这会影响前三列(
零售商
部门
类型
),它们必须始终位于前三列中。这是因为它们首先按日期排序,然后按字符值排序

如何对列进行重新排序,使前三列保持原样,并以正确的顺序获取日期

更新:

我可以像这样对列进行排序,这是解决方案的第一部分:

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
#使用模式获取列索引

嗨!你试过只从第四列排序吗?这是有道理的,但不起作用;列的顺序仍然相同(不正确),现在除了现有列之外,还会生成重复列(即
2019-01-12.1
)。(我也不能分享我的脚本,因为它超过200行。)@MusTheDataGuy。你能检查一下“nm1”和“nm2”的输出吗。我认为一定是一些简单的错误导致了这个问题。您确定列名是唯一的吗?我已选中,并且
nm1
nm2
共享相同的日期值和
x
值;然而,
nm2
也有
零售商
部门
类型
,而
nm1
没有。“有什么好主意吗?”穆斯赫达盖伊说。"nm2"有错。现在检查它现在应该可以工作了,因为“nm2”是通过使用setdiff的setdiff创建的,setdiff创建了列的副本
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)