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

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

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")将我的数据输入程序

4

1 回答 1

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
于 2013-02-21T04:33:15.740 回答