R 连续块上的平均

R 连续块上的平均,r,R,我有这样的数据: f x A 1.1 A 2.2 A 3.3 B 3.5 B 3.7 B 3.9 B 4.1 B 4.5 A 5.1 A 5.2 C 5.4 C 5.5 C 6.1 B 6.2 B 6.3 我想在连续的f块上取x的平均值,以得到这一点,类似于tapply(…,mean),但要注意这样一个事实,即它不应该以原始顺序混合分离的块: f x A 2.2 B 3.94 A 5.15 C 5.67 B 6.25 这里有一个方法: ## reproducible code for

我有这样的数据:

f  x 
A 1.1
A 2.2
A 3.3
B 3.5
B 3.7
B 3.9
B 4.1
B 4.5
A 5.1
A 5.2
C 5.4
C 5.5
C 6.1
B 6.2
B 6.3
我想在连续的
f
块上取
x
的平均值,以得到这一点,类似于
tapply(…,mean)
,但要注意这样一个事实,即它不应该以原始顺序混合分离的块:

f  x
A 2.2
B 3.94
A 5.15 
C 5.67
B 6.25
这里有一个方法:

## reproducible code for example
dat <- read.table(foo <- textConnection("f  x 
A 1.1
A 2.2
A 3.3
B 3.5
B 3.7
B 3.9
B 4.1
B 4.5
A 5.1
A 5.2
C 5.4
C 5.5
C 6.1
B 6.2
B 6.3
"), header = TRUE)
close(foo)
给予:

> aggregate(x ~ f + fac, data = dat, FUN = mean)
  f fac        x
1 A   1 2.200000
2 B   2 3.940000
3 A   3 5.150000
4 C   4 5.666667
5 B   5 6.250000
如果不需要,我们可以很容易地删除结果中的第二列
fac

> aggregate(x ~ f + fac, data = dat, FUN = mean)[,-2]
  f        x
1 A 2.200000
2 B 3.940000
3 A 5.150000
4 C 5.666667
5 B 6.250000

rle
是一种可能性:

> id <- rle(as.character(Data$f))
> Means <-tapply(Data$x,rep(1:length(id$lengths),id$lengths),mean)    
> data.frame(Means,f=id$values)
     Means f
1 2.200000 A
2 3.940000 B
3 5.150000 A
4 5.666667 C
5 6.250000 B
>id表示数据帧(表示f=id$值)
方法f
12.20万A
2.3.940000 B
35.150000 A
4.5.666667 C
5.6.250000 B

它提供了运行和值,因此您可以同时使用它们。

啊,我明白了…;-)顺便说一下,骨料的使用很好。是的,我忘记了rle。。。Acc最优雅
> id <- rle(as.character(Data$f))
> Means <-tapply(Data$x,rep(1:length(id$lengths),id$lengths),mean)    
> data.frame(Means,f=id$values)
     Means f
1 2.200000 A
2 3.940000 B
3 5.150000 A
4 5.666667 C
5 6.250000 B