按时间顺序对r数据帧中的4行进行排序
我有一个数据框,第一列作为id,第二列作为日期。其他3列包含一些其他随机值 数据框的大小=5列160000行 我想根据日期的时间顺序和第二列中的记录对前4条记录进行排序。 4条记录中最老的应排在第一位,最新的应排在最后。 在这之后,我必须继续对第四组中的所有行进行排序按时间顺序对r数据帧中的4行进行排序,r,R,我有一个数据框,第一列作为id,第二列作为日期。其他3列包含一些其他随机值 数据框的大小=5列160000行 我想根据日期的时间顺序和第二列中的记录对前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 0
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")),]
列的数据类型为整数。我试着把它读作日期
谢谢您需要添加一个索引列,例如每四行添加一个重复值,然后您可以使用它分组排序 我在这里提供了一个示例,您可以使用日期列修改它,但这是相同的想法
d <- data.frame(ID = 1:16, df = as.integer(runif(16, 0,30)))
# add an index
d$by <- rep(1:(nrow(d)/4), each = 4)
d
# sort by the index
sort.ind <- by(d, d$by, function(x) x[order(x$df, decreasing = T),])
# bind the sorted data frames together
d.sort <- do.call(rbind, sort.ind)
d.sort
d您可以使用整数除法%/%
为每组四个人提供一个“虚拟”索引:
# 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")),]
你能提供一个可复制的例子吗?你的日期栏是date/POSIXct等类型还是字符@西蒙尼是对的。。。我们需要一个可复制的例子谢谢我添加了一个有问题的例子。。。您的格式“%d/%m/%Y”
与您的示例数据不一致,这些数据看起来更像“%m/%d/%Y”
。感谢DigeMail的帮助
> 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