2017-09-08 14 views
1

私は2週間間隔ごとに最大値を見つけることによって大きなデータセット(52k +行)を単純化しようとしています。私はすでにすべての行に週番号の値を割り当てておき、毎週の最大値を見つけるためにaggregate()関数を使用しました。サンプルデータを簡素化集計奇数/偶数のペア

:(:週1 & 2、週3 & 4 ... EX)

week <- c(1:5, 5, 7:10) 
conc <- rnorm(mean=50, sd=20, n=10) 
df <- data.frame(week,conc) 

aggregate(df, by=list(week), FUN=max) 

はしかし、私はさらに2週間の間隔に基づいて集計する方法に引っかかっています。毎週サンプルを採取したので、1行おきにまとめるほど簡単ではありません。

私は単純な解決策があると仮定していますが、私はそれをまだ見つけていません。

ありがとうございます!

+0

それぞれ隔週ペアをつかむために

library(pracma) aggregate(df, by=list(ceil(df$week/2)), FUN=max) 

出力はちょうど別のSOクエリにこれを示しました。 'tapplyを試してください(df $ conc、rep(1:(nrow(df)/ 2)、each = 2)、FUN = sum)' – Sagar

+1

5週目にどうしたらいいですか? 5週目の値は返されるべきですか? NA? –

+0

Sagar:欠落している週があればまだペアリングを捨てるようです。あなたのコードが間違っていると解釈しない限り... – keta

答えて

1
week <- c(1:5, 5, 7:10) 

bi_week <- (week+1)%/%2 

conc <- rnorm(mean=50, sd=20, n=10) 

df <- data.frame(week,bi_week,conc) 

aggregate(df, by=list(bi_week), FUN=max) 
0
library(purrr) 
library(dplyr) 

Odds<-seq(1:max(week),2) 
Evens<-seq(2,max(week),2) 

map2(.x=Odds,.y=Evens, .f=function(x,y) {df %>% 
filter(week==x | week==y) %>% select(conc) %>% max}) 

私は最初にオッズと偶数のベクトルを作った。 purrrパッケージを使用して、dplyrパッケージを使用して正確な週数を取得する機能にこれらのペアワイズ(1 & 2、次に3 & 4など)を入力して、concの値を選択し、ここで

が出力されます。

> map2(.x=Odds,.y=Evens, .f=function(x,y) {df %>% filter(week==x | week==y) %>% select(conc) %>% max}) 
[[1]] 
[1] 68.38759 

[[2]] 
[1] 56.9231 

[[3]] 
[1] 77.23965 

[[4]] 
[1] 49.39443 

[[5]] 
[1] 49.38465 

注:map2の代わりにmap2_dblを使用して、代わりに

編集数値ベクトルを得ることができます:それは誤りだったとしてdf2に関する部分を削除しました。

0

使用pracma::ceil

Group.1 week  conc 
1  1 2 76.09191 
2  2 4 50.20154 
3  3 5 54.93041 
4  4 8 69.17820 
5  5 10 74.67518 

ceil(df$week/2) 
# 1 1 2 2 3 3 4 4 5 5 
関連する問題