2012-07-05 43 views
3

我有一個包含時間戳像這樣的文件,第二個統計:每R中

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

我想找到每秒的統計數據,就像在第1條第二:5個值,第2條第二:4,3秒3在上面的文件中使用R.我還希望查找每秒平均值,所有秒中的最大值和所有秒中的最小值。這些如何用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) 

回答

3

您也可以使用切換功能創建一個因子(時間範圍),然後以類似的方式使用賈斯汀打算如何與骨料:

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 
+0

是。這是我想要的確切結果 – newbie555 2012-07-05 18:08:00

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.tableplyr包這種聚集。

對於每個組,maxmin相當容易。如果你只是想max或一系列min您可以使用這些功能直接

> max(x) 
[1] 2.890879 
> 
+0

通過'trunc(x)'分組可能甚至會更快。也許:'tapply(x,trunc(x),mean)'並且得到它們需要的長度:'tapply(x,trunc(x),length)' – 2012-07-05 17:51:01

+0

@Dwin好點,'trunc'或'floor '可能比「數學」方法更快。 – Justin 2012-07-05 17:54:17

+0

@DWin和兩個非常好的回答都比我自己的要快。它總是令我驚訝的是,創意人員是如何使用矢量化解決方案的。 +1(德文,我建議你添加你的解決方案?) – 2012-07-05 17:56:36