2

私はここにあるものに似たプロットを作成しようとしています:

ケイデンス分布

基本的に、ヒストグラムが必要です。各ビンには、その範囲のケイデンスで費やされた時間が表示されます(たとえば、0〜20 rpmで1時間、21〜40 rpmで3時間など)。

library("rjson") # 3rd party library, so: install.packages("rjson")

# Load data from Strava API.
# Ride used for example is http://app.strava.com/rides/13542320
url <- "http://app.strava.com/api/v1/streams/13542320?streams[]=cadence,time"
d <- fromJSON(paste(readLines(url)))

(rpm)の各値は、 (開始からの秒数d$cadence)の同じインデックスとペアになっています。d$time

値は必ずしも均一ではありません(と比較するとわかるようplot(x=d$time, y=d$cadence, type='l')plot(d$cadence, type='l')

私が可能な限り単純なことをする場合:

hist(d$cadence)

..これは非常に近いものを生成しますが、Y値は時間ではなく「周波数」であり、各データポイント間の時間を無視します(したがって、特に0rpmセグメントは過小評価されます)

4

1 に答える 1

2

サンプル間の時間を考慮して、新しい列を作成する必要があります。

私はこの種のことのためにリストよりdata.framesを好むので:

d <- as.data.frame(fromJSON(paste(readLines(url))))
d$sample.time <- 0
d$sample.time[2:nrow(d)] <- d$time[2:nrow(d)]-d$time[1:(nrow(d)-1)]

サンプル時間を取得したので、サンプル時間が1を超えるものについては、ケイデンス測定値を「繰り返す」だけで、そのヒストグラムをプロットできます。

hist(rep(x=d$cadence, times=d$sample.time),
     main="Histogram of Cadence", xlab="Cadence (RPM)",
     ylab="Time (presumably seconds)")

整数以外のサンプル時間では崩壊しない、より洗練されたソリューションがあるはずですが、これはサンプルデータで機能します。

編集:re:よりエレガントで一般化されたソリューションでは、のようなもので非整数のサンプル時間を処理できますがnew.d <- aggregate(sample.time~cadence, data=d, FUN=sum)、問題は度数分布表のように見えるが非整数の周波数でヒストグラムをプロットすることです。少し調べてみたところ、データをさらにビンに集約し、棒グラフで表示することで、この場合は独自のヒストグラムを作成する必要があるという結論に達しました。

于 2012-07-17T20:18:22.060 に答える