gpt4 book ai didi

r - 连续 block 上的平均

转载 作者:行者123 更新时间:2023-12-04 17:12:53 27 4
gpt4 key购买 nike

我有这样的数据:

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

我要平均 xf 的连续块上,得到这个,类似于 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)

我们使用 rle()计算 f 的运行长度并创建一个新因子 facf 中索引更改,因为需要更好的词.然后我们在 f 上聚合和 fac :
lens <- with(dat, rle(as.character(f)))
dat$fac <- with(lens, factor(rep(seq_along(lengths), times = lengths)))
aggregate(x ~ f + fac, data = dat, FUN = mean)

给予:
> 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

关于r - 连续 block 上的平均,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5484984/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com