1

私はRにかなり慣れていませんが、現在の問題よりもはるかに大きな課題に取り組んできたため、特にイライラしています。フォーラムを検索し、関連するトピックをいくつか見つけましたが、この状況にうまく対処できるものはありませんでした。

14 個の変数の 184 個の観測データを含むデータセットがあります。

> head(diving)
   tagID ddmmyy Hour.GMT. Hour.Local.  X0  X3 X10  X20  X50 X100 X150 X200 X300 X400
1 122097 250912         0           9 0.0 0.0 0.3 12.0 15.3 59.6 12.8  0.0    0    0
2 122097 260912         0           9 0.0 2.4 6.9  5.5 13.7 66.5  5.0  0.0    0    0
3 122097 260912         6          15 0.0 1.9 3.6  4.1 12.7 39.3 34.6  3.8    0    0
4 122097 260912        12          21 0.0 0.2 5.5  8.0 18.1 61.4  6.7  0.0    0    0
5 122097 280912         6          15 2.4 9.3 6.0  3.4  7.6 21.1 50.3  0.0    0    0
6 122097 290912        18           3 0.0 0.2 1.6  6.4 41.4 50.4  0.0  0.0    0    0

これはタグ付けデータで、各日付には 1 つ以上の 6 時間のタイム ビンがあります (送信の中断により、連続したデータセットではありません)。各 6 時間ビンでは、動物が潜った深度が % で 10 ビンに分類されます。したがって、X0 = 0 ~ 3 分で費やされた時間の割合、X3 = 3 ~ 10 分で費やされた時間の割合、などとなります。

手始めにやりたいことは、各深度ビンで費やされた平均時間を取り、それをプロットすることです。まず、次のことを行いました。

avg0<-mean(diving$X0)
avg3<-mean(diving$X3)
avg10<-mean(diving$X10)
avg20<-mean(diving$X20)
avg50<-mean(diving$X50)
avg100<-mean(diving$X100)
avg150<-mean(diving$X150)
avg200<-mean(diving$X200)
avg300<-mean(diving$X300)
avg400<-mean(diving$X400)

この時点で、結果の平均をプロットする方法がわからなかったので、それらをリストにしました。

divingmeans<-list(avg0, avg3, avg10, avg20, avg50, avg100, avg150, avg200, avg300, avg400)

boxplot(divingmeans) は、X 軸に 1:10、Y 軸に % 0-30 を提供する、一種の作品です。ただし、ランク 1:10 だけでなく、カテゴリ ビン名 (avg3 または X3 など) を提供する x 軸と同様に、ヒストグラムを好むでしょう。

hist() と plot() は以下を提供します。

> plot(divingmeans)
Error in xy.coords(x, y, xlabel, ylabel, log) : 
  'x' is a list, but does not have components 'x' and 'y'
> hist(divingmeans)
Error in hist.default(divingmeans) : 'x' must be numeric

私も試しました:

> df<-as.data.frame(divingmeans)
> df
  X3.33097826086957 X3.29945652173913 X8.85760869565217 X17.6461956521739 X30.2614130434783
1          3.330978          3.299457          8.857609           17.6462          30.26141
  X29.3565217391304 X6.44510869565217 X0.664130434782609 X0.135869565217391 X0.0016304347826087
1          29.35652          6.445109          0.6641304          0.1358696         0.001630435

> df <- data.frame(matrix(unlist(divingmeans), nrow=10, byrow=T))
> df
   matrix.unlist.divingmeans...nrow...10..byrow...T.
1                                        3.330978261
2                                        3.299456522
3                                        8.857608696
4                                       17.646195652
5                                       30.261413043
6                                       29.356521739
7                                        6.445108696
8                                        0.664130435
9                                        0.135869565
10                                       0.001630435

どちらも私が探している種類のテーブルを提供しません。

これを適切なテーブルに変換するための本当に基本的な解決策があるに違いないことは知っていますが、一生それを理解することはできません。平均して、各ダイビングビンで費やされた時間の割合を示す基本的なヒストグラムを作成できるようにしたいと考えています。この目的に最適なデータ形式は、col1=bin (カテゴリ; avg50 など) と col2=% (数値; そのカテゴリで費やされた時間の平均 %) の 2 つの列を持つテーブルです。

また、データが異なるタイミング ビンに分割されていることにも気付くでしょう。最終的には、データを時間帯ごとに分けて、たとえば、平均潜水深度が昼と夜の間で変化するかどうかなどを確認できるようにしたいと考えています。この最初のコードが完成したら、たとえばX0[which(Hour.GMT.=="6")]. これに関するヒントも大歓迎です。

4

2 に答える 2

2

長い形式のデータを扱う方がはるかに簡単だと思います。

reshapeを使用できreshapeます。data.table を使用して、グループごとの平均を簡単に計算する方法を示します。

library(data.table)
DT <- data.table(diving)

DTlong <- reshape(DT, varying = list(5:14), direction = 'long', 
  times = c(0,3,10,20,50,100,150,200,300,400), 
  v.names = 'time.spent', timevar = 'hours')

timeByHours <- DTlong[,list(mean.time = mean(time.spent)),by=hours]

# you can then plot the two column data.table

plot(timeByHours, type = 'l')

ここに画像の説明を入力

深さで日付/時間/時間の任意の組み合わせで分析できるようになりました

于 2013-04-17T00:02:17.523 に答える
0

それらをどのようにプロットしますか?

# grab the means of each column
diving.means <- colMeans(diving[, -(1:5)])


# plot it
plot(diving.means)

# boxplot
boxplot(diving.means)

列名から間隔の下限を取得したい場合は、単に X を取り除いてください。

lowerIntervalBound <- gsub("X", "", names(diving)[-(1:5)])

# you can convert these to numeric and plot against them 
lowInts <- as.numeric(lowerIntervalBound)
plot(x=lowInts, y=diving.means)

# ... or taking log
plot(x=log(lowInts), y=diving.means)

# ... or as factors (similar to basic plot)
plot(x=factor(lowInts), y=diving.means)

ダイビング手段を に入れる代わりに、 ( を使用して)listに入れてみてください。vectorc

それをdata.frameに結合したい場合:

data.frame(lowInts, diving.means)

# or adding a row id if needed. 
data.frame(rowid=seq(along=diving.means), lowInts, diving.means)
于 2013-04-16T23:54:32.557 に答える