0

以前にこのような質問をしましたが、Rが非常に新しく、何が起こっているのか理解できなかったため、データ形式を単純化することにしました。質問へのリンクは次のとおりです。 Rプログラミング?

しかし、私は自分のデータがどのように見えるかを編集し、この形式のままにすることにしました。

X1.0   X X2.0 X.1
   0.9 0.9  0.2 1.2
  1.3 1.4  0.8 1.4

ご覧のとおり、4列のデータがあります。私が扱っている実際のデータは、最大2000データポイントです.....列「X1.0」と「X2.0」は「時間」を参照しています...私が欲しいのは、「X1.0」と「X2.0」の2つの時間列に基づいた、100秒ごとの「X」と「X.1」の平均です...このコマンドを使用して実行できます

cuts <- cut(data$X1.0, breaks=seq(0, max(data$X1.0)+400, 400))
   by(data$X, cuts, mean)

ただし、これでは1つのデータセットの平均しか得られません。これは「X1.0」と「X」です。複数のデータセットの平均を取得するにはどうすればよいですか。 ....私もこの種の出力をやめたい

cuts: (0,400]
[1] 0.7
------------------------------------------------------------ 
cuts: (400,800]
[1] 0.805

出力は400秒ごとに行われたことに注意してください....さまざまな間隔での平均であるカットのリストが本当に必要です...助けてください......私はちょうどdata=read.delim("clipboard")私のデータをプログラムに取り込むために使用しました

4

1 に答える 1

2

どの出力を取得したいかは少し混乱します。

最初に列名を変更しますが、これはオプションです

colnames(dat) <- c('t1','v1','t2','v2')

次にave、似ているbyが出力が優れているものを使用します。列にインデックスを付けるためにマトリックスのトリックを使用しています:

matrix(1:ncol(dat),ncol=2)  ## column1 is col1 adn col2...
     [,1] [,2]
[1,]    1    3
[2,]    2    4

次に、このマトリックスを で使用していapplyます。ここにソリューション全体があります:

cbind(dat,
      apply(matrix(1:ncol(dat),ncol=2),2,
     function(x,by=10){      ## by 10 seconds! you can replace this 
                             ## with 100 or 400 in you real data
     t.col <- dat[,x][,1]   ## txxx
     v.col <- dat[,x][,2]   ## vxxx
     ave(v.col,cut(t.col, 
                   breaks=seq(0, max(t.col),by)),
         FUN=mean)})
  )

EDITカットを修正し、コードを簡素化します

cbind(dat,
     apply(matrix(1:ncol(dat),ncol=2),2,
           function(x,by=10)ave(dat[,x][,1], dat[,x][,1] %/% by)))
   X1.0   X X2.0 X.1       1         2
1   0.9 0.9  0.2 1.2  3.3000  3.991667
2   1.3 1.4  0.8 1.4  3.3000  3.991667
3   2.0 1.7  1.6 1.1  3.3000  3.991667
4   2.6 1.9  2.2 1.6  3.3000  3.991667
5   9.7 1.0  2.8 1.3  3.3000  3.991667
6  10.7 0.8  3.5 1.1 12.8375  3.991667
7  11.6 1.5  4.1 1.8 12.8375  3.991667
8  12.1 1.4  4.7 1.2 12.8375  3.991667
9  12.6 1.8  5.4 1.2 12.8375  3.991667
10 13.2 2.1  6.3 1.3 12.8375  3.991667
11 13.7 1.6  6.9 1.1 12.8375  3.991667
12 14.2 2.2  9.4 1.3 12.8375  3.991667
13 14.6 1.8 10.0 1.5 12.8375 10.000000
于 2013-02-21T04:33:15.740 に答える