基本上,我需要在某些条件下计算行中的值的平均值 .
Name = c("A", "A", "A", "A", "B", "B", "B", "B")
temp = c(22, 22, 26, 23, 18, 20, 18, 17)
peak = c(0, 0, 1, 0, 0, 1, 0, 0)
new = NA
d<- data.frame(Name, temp, peak, new)
当峰值= 1时,计算temp i-1和i 1的平均值,将该值放在“new”列中 . 否则,new中的值应与temp相同 . 我想只在“名称”组中执行此操作,以便组A的临时值不与组B混合 .
然后,输出将如下所示:
Name temp peak new
1 A 22 0 22.0
2 A 22 0 22.0
3 A 26 1 22.5
4 A 23 0 23.0
5 B 18 0 18.0
6 B 20 1 18.0
7 B 18 0 18.0
8 B 17 0 17.0
我开始写一个ifelse语句,它可能看起来像这样:
d$new<-ifelse(d$peak==1, mean(peak[i-1, i+1]), d$temp)
我也考虑过lapply,但我认为这需要一个循环 . 有什么建议?
2 回答
这应该可以解决问题 . 没有循环
从动物园包中试试
rollapply
:请注意,这假设边界没有峰值(问题中的情况) .
REVISED 一些简化 .
这是输出: