之前我问过这样的问题,但我决定简化我的数据格式,因为我在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")
将我的数据导入程序
答案 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