2017-06-21 111 views
0

我有一個數據框,第一列作爲id和第二列作爲日期。其他3列包含一些其他隨機值。要按時間順序排序在r數據框中的4組中的行

數據幀的大小= 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")),] 

列的數據類型是整數。我正在嘗試將其作爲日期閱讀。

感謝

+1

你可以提供一個可重複的例子嗎? – simone

+0

是Date/POSIXct類型或字符類型的日期列嗎? @simone是正確的...我們需要一個可重複的例子 – digEmAll

+0

謝謝我添加了一個有問題的例子。 – Earthshaker

回答

0

可以使用整數除法%/%給 「虛擬」 索引每組四:

# 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 
+0

感謝digEmAll幫幫我 – Earthshaker

0

你需要用一個重複的值添加索引列例如每四行,那麼你可以使用這個組進行排序英寸

我在這裏提供了一個例子,你可以用你的日期列修改它,但它是一樣的想法。

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 
相關問題