0

グラフ、私はダウンしています。課題は、複数のデータセット(1つのLARGEデータセットのサブセット)をグラフ化するための_exact_same_code_があることですが、$を正しく置き換えるためのループコードを正しく取得できないようです。

次の形式のデータセット、df1、df2、df3 ...

OBSDATE     REGION  AVG_RESP  P10  P90
2012-02-01  APAC    1.276     0.78 3.45
2012-02-01  EMEA    2.341     1.23 5.67
2012-02-02  APAC    1.343     0.89 3.21
2012-02-02  EMEA    2.473     1.37 5.98

グラフはもっと複雑ですが、次のようになります。

avgMx <- quantile(df1$P90,0.95)
ggplot(df1,aes(x=OBSDATE,y=AVG_RESP))+coord_cartesian(ylim=c(0,avgMx))+geom_ribbon(aes(ymin=P10,ymax=P90),fill="gray60",alpha=0.33)+geom_line(aes(x=OBSDATE,y=AVG_RESP),color="#007DB1",size=0.5)+facet_wrap(~REGION)

データセット名を使用してベクトルまたはリスト(両方とも同じエラーメッセージで失敗するようです)を定義すると、説明的な値(上記の分位数や最大値など)を見つけるためにループを機能させることができません。

filenames <- c("df1","df2","df3")

このようなものを動かしたい

for (i in filenames) {
   quantile(i$AVG_RESP,0.95)
   max(i$AVG_RESP)
}

しかし、$がアトミックベクトルに対して無効であるというエラーが発生します。調査したところ、それは有用な結果をもたらさないようです。

だから、私はこれを機能させることができます:

max(df1$AVG_RESP) or max(df1['AVG_RESP'])

どちらも上から2.473を出力します。ただし、これは飛ばない:

for (i in pagesC) max(i['AVG_RESP'])

何もしません。これに変更します:

for (i in pagesC) print(max(i['AVG_RESP']))

NAのインスタンスを提供します。

私は完全に立ち往生しています。どんな助けでも大歓迎です!

編集:エラーの原因となったデータを修正しました-これで再現可能になるはずです。

4

2 に答える 2

3

あなたのコードは再現可能ではないので、これはあなたが望むものについての私の最良の推測です:

df1 <- df2 <- df3 <- read.table(text="OBSDATE     REGION  AVG_RESP  P10  P90
2012-02-01  APAC    1.276     0.78 3.45
2012-02-01  EMEA    2.341     1.23 5.67
2012-02-02  APAC    1.343     0.89 3.21
2012-02-02  EMEA    2.473     1.37 5.98
2012-02-01  APAC    1.276     0.78 3.45
2012-02-01  EMEA    2.341     1.23 5.67
2012-02-02  APAC    1.343     0.89 3.21
2012-02-02  EMEA    2.473     1.37 5.98
2012-02-01  APAC    1.276     0.78 3.45
2012-02-01  EMEA    2.341     1.23 5.67
2012-02-02  APAC    1.343     0.89 3.21
2012-02-02  EMEA    2.473     1.37 5.98", header=TRUE)

info <- function(dataframe){
    c(quantile(dataframe$AVG_RESP,0.95), max(dataframe$AVG_RESP))
}

LIST <- list(df1, df2, df3)
lapply(LIST, info)   
#Or you may want to use sapply if you want it to return a matrix
sapply(LIST, info) 

Rはループを使用できますが、これは実際にはRのやり方ではありません。

于 2012-04-11T21:48:09.160 に答える
3

i文字列です。に保持されている名前のオブジェクトが必要ですi。それがget()機能です。(あなたが与えたものは再現性がなかったので、テストされていません。)

for (filename in filenames) {
   i <- get(filename)
   quantile(i$AVG_RESP,0.95)
   max(i$AVG_RESP)
}

ただし、これはおそらく問題を解決するための最良の方法ではありません。すべてのデータフレームをリストに入れ、そのリストをループlapplyする方が良いアプローチかもしれません(タイラーが彼の回答で説明したこと)。さらに、これらがあなたが持っているより大きな単一のデータフレームで作成したサブセットである場合、さらに良いアプローチは、plyrパッケージから何かを使用して、ビッグデータフレームを分割する方法と各部分をどうするかを定義することです。 。

于 2012-04-11T21:57:11.253 に答える