2017-05-25 10 views
1

これで解決策を見つけるのは難しいですが、間隔と頻度分布の解のみを見つけることができます。範囲/バケットを2列に作成

私は、より多くの100,000行と2つの列を持つ大きなデータセットを持っており、このサンプルを以下に示しています。

kl 
pred1 actual_range 
108.43 0 - 5 
502.31 215.66 
268.19 86 - 88 
273.28 87.87 

Pred_1を持っている必要があります。

nm 
predict actual 
502.31 215.66 
369.43 143.48 
108.43 0.00 
273.28 87.87 
108.43 0.00 
268.19 86.00 
108.43 0.00 
108.43 0.00 
108.43 0.00 
268.19 86.82 
108.43 0.00 
108.43 5.00 
268.19 88.00 
108.43 5.00 

は今、私は次の出力が必要とされる新しいデータセット(KL)を持つようにしたい:後述するように

このデータセット(nm)は2つの列を持っていますpredictとActual_rangeのすべての一意の値は、実際の列ごとにその特定の予測値の範囲/バケットを持つ必要があります。

大きなデータセットに対してこれを作成するにはどうすればよいですか。

私の質問がまだ明確でない場合は、私に知らせてください。

ありがとうございます。

答えて

0

操作ごとにグループを設定できます。 「予測」によってグループ化され、(setDT(nm))「data.table」から「data.frame」を変換し、ここでベース - 使用可能なソリューションです一緒に「実際」、pasteunique要素

library(data.table) 
setDT(nm)[, .(actual_range = paste(unique(range(actual)), collapse='-')), predict] 
+1

基地Rアナログ、 '集約(CBIND( "actual_range"=実際の)〜予測、データ= DF、FUN =関数(X)ペースト(ユニーク(範囲(X))、崩壊= " - ")) '。 – lmo

0

rangeを取得R:

DF <- read.csv(text= 
"predict,actual 
502.31,215.66 
369.43,143.48 
108.43,0.00 
273.28,87.87 
108.43,0.00 
268.19,86.00 
108.43,0.00 
108.43,0.00 
108.43,0.00 
268.19,86.82 
108.43,0.00 
108.43,5.00 
268.19,88.00 
108.43,5.00") 


res <-aggregate(actual~predict, 
       data=DF, 
       FUN=function(x){ 
        minV <- min(x) 
        maxV <- max(x) 
        if(minV != maxV) 
        return(paste0(minV,'-',maxV)) 
        return(minV) 
       }) 

> res 
    predict actual 
1 108.43 0-5 
2 268.19 86-88 
3 273.28 87.87 
4 369.43 143.48 
5 502.31 215.66 
関連する問題