3

我有一个包含这样的时间戳的文件:

0.000100
0.003890
0.567980
0.999000
0.999990
1.000010
1.236800
1.456098
1.989001
2.098710
2.309879
2.890879 

我想在上面的文件中使用 R 找到每秒的统计信息,例如第一秒:5 个值,第二秒:4,第三秒 3。我还想找到每秒平均数,所有秒数的最大值和最小值所有秒的值。如何使用 R 提取这些?我是 R 的新手,仍在学习。我知道如何在直方图中绘制这些,但不知道如何提取这些值。

数据:

x <- c(0.0001, 0.00389, 0.56798, 0.999, 0.99999, 1.00001, 1.2368, 1.456098, 
    1.989001, 2.09871, 2.309879, 2.890879)
4

2 回答 2

3

您还可以使用 cut 函数创建一个因子(时间范围),然后以与 Justin 建议的聚合方式类似的方式使用:

y <- data.frame(val=x, time=cut(x, 0:round(max(x))))
aggregate(val~time, y, length)
aggregate(val~time, y, mean)

或者创建自己的函数并一举完成:

funner <- function(x){
    c(mean=mean(x), n=length(x), min=min(x), max=max(x), sd=sd(x))
}

aggregate(val~time, y, funner)

产生:

> aggregate(val~time, y, funner)
   time  val.mean     val.n   val.min   val.max    val.sd
1 (0,1] 0.5141920 5.0000000 0.0001000 0.9999900 0.4996575
2 (1,2] 1.4204773 4.0000000 1.0000100 1.9890010 0.4223025
3 (2,3] 2.4331560 3.0000000 2.0987100 2.8908790 0.4102205
于 2012-07-05T17:50:57.177 回答
2

您可以使用整数数学来做到这一点:

x <- c(1e-04, 0.00389, 0.56798, 0.999, 0.99999, 1.00001, 1.2368, 1.456098, 
1.989001, 2.09871, 2.309879, 2.890879)

> aggregate(x, list(x %/% 1), mean)
  Group.1        x
1       0 0.514192
2       1 1.420477
3       2 2.433156
> 

我还建议您为这种聚合查找data.table和打包。plyr

每个组的max和都很容易遵循。min如果您只需要maxormin的系列,您可以直接使用这些功能

> max(x)
[1] 2.890879
> 
于 2012-07-05T17:43:08.237 回答