多列数据并获得平均R程序

时间:2013-02-21 03:31:31

标签: r list average mean

之前我问过这样的问题,但我决定简化我的数据格式,因为我在R上很新,并且不明白发生了什么......这里是问题的链接How to handle more than multiple sets of data in R programming?

但是我编辑了我的数据应该是什么样的,并决定把它留下来......就这种格式......

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

正如您所看到的,我有四列数据,我正在处理的实际数据是多达2000个数据点.....列“X1.0”和“X2.0”指的是“时间”。 ..所以我想要的是基于我的2列时间“X1.0”和“X2.0”每100秒平均“X”和“X.1”......我可以用它做这个命令

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

但是这只会给我一组数据的平均值......这是“X1.0”和“X”......我将如何做到这一点,以便我可以得到超过平均数一个数据集....我也想停止这种输出

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

请注意,输出是每400秒完成的....我真的想要一个不同时间间隔的平均值列表...请帮助......我刚刚使用data=read.delim("clipboard")将我的数据导入程序

1 个答案:

答案 0 :(得分:2)

您希望得到什么输出有点令人困惑。

首先我更改了colnames,但这是可选的

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)})
  )

编辑更正剪辑并简化代码

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