我有一个存储不同值的数据框。样本:

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$higha$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

注意:这绝不会使其他答案失去光泽。它在大多数情况下都可以运行,并且速度很快。

关于r - 计算数据框中两列的平均值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33981527/

10-10 22:20