2017-06-21 10 views
0

私は最初の列がidで、2番目の列がdateであるデータフレームを持っています。他の3列には他のランダム値が含まれています。rのデータフレームで4のグループの行を時系列でソートするには

データフレームのサイズ= 5列および160000行。

2番目の列のレコードに対して、日付の日付順に基づいて最初の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 

のグループに次のこれを行うにはどのような方法をすべての行をソートするに行かなければなりませんか?

Iは、列のデータ・タイプは整数であるが、今のグループにこれを分割することができ、4行

d[order(as.Date(d$df, format="%d/%m/%Y")),] 

ためのとしてこれを使用しています。私はそれを日付として読もうとしています。あなたが繰り返し値を持つすべての4行をインデックス列などを追加する必要が

おかげ

+1

はあなたが再現可能な例を提供することができますか? – simone

+0

日付/ POSIXctなどの日付型列か文字か@imonは正しい...再現可能な例が必要 – digEmAll

+0

ありがとう私は問題の例を追加しました。 – Earthshaker

答えて

0

あなたは4の各グループに "仮想" のインデックスを与える整数の除算%/%を使用することができます。

# 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

助けて – 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 
関連する問題