我有一个数据框,第一列作为 id ,第二列作为日期。其他 3 列包含一些其他随机值。
数据框的大小 = 5 列和 160000 行。
我想根据日期的时间顺序对前 4 条记录与第二列中的记录进行排序。4 个中最早的记录应该在最前面,最新的记录应该在最后。在此之后,我必须继续对 4 组中的所有行进行排序。
ID Date A B C
X 10/27/2011 12 47 78
Y 09/28/2015 27 14 41
Z 01/14/2013 24 25 45
W 04/21/2005 14 74 21
-
-
-
-
upto 160000 rows
output
ID Date A B C
W 04/21/2005 14 74 21
X 10/27/2011 12 47 78
Z 01/14/2013 24 25 45
Y 09/28/2015 27 14 41
-
-
-
upto 160000 rows
有什么办法可以做到这一点?
我现在正在使用它,但无法将其分成 4 行的组
d[order(as.Date(d$df, format="%d/%m/%Y")),]
列的数据类型是整数。我正在尝试将其作为日期阅读。
谢谢
您可以使用整数除法%/%
为每组四个提供一个“虚拟”索引:
# recreate a random DF
set.seed(123)
DF <-
data.frame(ID=paste0('ID',1:10),
Date=c("21/06/2017", "23/06/2017", "10/06/2017", "18/06/2017", "27/06/2017",
"01/06/2017", "13/06/2017", "07/06/2017", "24/06/2017", "05/06/2017"),
A=rnorm(10,4,100))
# define virtual indexes
groupsOf4 <- (1:nrow(DF)-1) %/% 4
# order by groupsOf4 and then by Date
sortedDF <- DF[order(groupsOf4, as.Date(DF$Date, format="%d/%m/%Y")),]
结果 :
> DF
ID Date A
1 ID1 21/06/2017 -52.04756
2 ID2 23/06/2017 -19.01775
3 ID3 10/06/2017 159.87083
4 ID4 18/06/2017 11.05084
5 ID5 27/06/2017 16.92877
6 ID6 01/06/2017 175.50650
7 ID7 13/06/2017 50.09162
8 ID8 07/06/2017 -122.50612
9 ID9 24/06/2017 -64.68529
10 ID10 05/06/2017 -40.56620
> sortedDF
ID Date A
3 ID3 10/06/2017 159.87083
4 ID4 18/06/2017 11.05084
1 ID1 21/06/2017 -52.04756
2 ID2 23/06/2017 -19.01775
6 ID6 01/06/2017 175.50650
8 ID8 07/06/2017 -122.50612
7 ID7 13/06/2017 50.09162
5 ID5 27/06/2017 16.92877
10 ID10 05/06/2017 -40.56620
9 ID9 24/06/2017 -64.68529
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句