2011-10-23 9 views
4

私はggplotを使って約2900万の値を含む大きなデータセットのCDF曲線をプロットしようとしています。私がこれを計算する方法は、次のようなものです:ポイントのサブセットのみをプロットする?

mycounts = ddply(idata.frame(newdata), .(Type), transform, ecd = ecdf(Value)(Value)) 
plot = ggplot(mycounts, aes(x=Value, y=ecd)) 

これはプロットする年月です。実際の結果を妥協することなく、このデータセットのサンプル(たとえば、10番目または50番目の各ポイント)をプロットするクリーンな方法があるかどうか疑問に思っていましたか?

答えて

5

私はあなたのデータ構造についてはよく分からないけど、簡単なsampleコールは十分かもしれません:

n <- nrow(mycounts)        # number of cases in data frame 
mycounts <- mycounts[sample(n, round(n/10)), ] # get an n/10 sample to the same data frame 
+0

+1ありがとうございます。これは完璧に動作します! – Legend

1

代わりに、すべてのN番目のポイントを取って、あなたは十分にまで設定してデータを量子化することができますそれをプロットする前に解像度?そうすれば、必要のない(または見えない)解像度をプロットする必要がなくなります。

あなたがこれを行う方法の1つです。 (私は以下の書いた関数は汎用的ですが、例では、あなたの質問から名前を使用しています)

library(ggplot2) 
library(plyr) 

## A data set containing two ramps up to 100, one by 1, one by 10 

tens <- data.frame(Type = factor(c(rep(10, 10), rep(1, 100))), 
        Value = c(1:10 * 10, 1:100)) 


## Given a data frame and ddply-style arguments, partition the frame 
## using ddply and summarize the values in each partition with a 
## quantized ecdf. The resulting data frame for each partition has 
## two columns: value and value_ecdf. 

dd_ecdf <- function(df, ..., .quantizer = identity, .value = value) { 
    value_colname <- deparse(substitute(.value)) 
    ddply(df, ..., .fun = function(rdf) { 
    xs <- rdf[[value_colname]] 
    qxs <- sort(unique(.quantizer(xs))) 
    data.frame(value = qxs, value_ecdf = ecdf(xs)(qxs)) 
    }) 
} 


## Plot each type's ECDF (w/o quantization) 

tens_cdf <- dd_ecdf(tens, .(Type), .value = Value) 
qplot(value, value_ecdf, color = Type, geom = "step", data = tens_cdf) 



## Plot each type's ECDF (quantizing to nearest 25) 

rounder <- function(...) function(x) round_any(x, ...) 
tens_cdfq <- dd_ecdf(tens, .(Type), .value = Value, .quantizer = rounder(25)) 
qplot(value, value_ecdf, color = Type, geom = "step", data = tens_cdfq) 

元のデータセットと関数ecdfセットは110行を持っていたものの、量子化され、関数ecdfセットが大幅に削減されます。

> dim(tens) 
[1] 110 2 
> dim(tens_cdf) 
[1] 110 3 
> dim(tens_cdfq) 
[1] 10 3 
> tens_cdfq 
    Type value value_ecdf 
1  1  0  0.00 
2  1 25  0.25 
3  1 50  0.50 
4  1 75  0.75 
5  1 100  1.00 
6 10  0  0.00 
7 10 25  0.20 
8 10 50  0.50 
9 10 75  0.70 
10 10 100  1.00 

私はこれが役立つことを望みます。 :-)

関連する問題