我有一个存储不同值的数据框。样品:
a$open a$high a$low a$close
1.08648 1.08707 1.08476 1.08551
1.08552 1.08623 1.08426 1.08542
1.08542 1.08572 1.08453 1.08465
1.08468 1.08566 1.08402 1.08554
1.08552 1.08565 1.08436 1.08464
1.08463 1.08543 1.08452 1.08475
1.08475 1.08504 1.08427 1.08436
1.08433 1.08438 1.08275 1.08285
1.08275 1.08353 1.08275 1.08325
1.08325 1.08431 1.08315 1.08378
1.08379 1.08383 1.08275 1.08294
1.08292 1.08338 1.08271 1.08325
我想做的是创建一个新列,a$mean
该列存储每行的平均值a$high
和a$low
。
这是我达到的目的:
highlowmean <- function(highs, lows){
m <- vector(mode="numeric", length=0)
for (i in 1:length(highs)){
m[i] <- mean(highs[i], lows[i])
}
return(m)
}
a$mean <- highlowmean(a$high, a$low)
但是我一般对R语言和函数语言还是有点陌生,所以我很确定有一种更有效/更简单的方法可以实现这一点。
如何实现最聪明的方式?
我们可以用 rowMeans
a$mean <- rowMeans(a[,c('high', 'low')], na.rm=TRUE)
注意:如果有NA值,则最好使用 rowMeans
例如
a <- data.frame(High= c(NA, 3, 2), low= c(3, NA, 0))
rowMeans(a, na.rm=TRUE)
#[1] 3 3 1
和使用 +
a1 <- replace(a, is.na(a), 0)
(a1[1] + a1[2])/2
# High
#1 1.5
#2 1.5
#3 1.0
注意:这绝不会使其他答案失去光泽。它在大多数情况下都可以运行,并且速度很快。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句