计算数据框中两列的平均值
Compute the mean of two columns in a dataframe
我有一个存储不同值的数据框。示例:
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 和一般的函数式语言有点陌生,所以我很确定还有更多 efficient/simple 方法可以实现。
如何以最聪明的方式实现这一点?
我们可以使用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
注意:这不是试图玷污其他答案的方法。它在大多数情况下都有效,而且速度也很快。
对于两个数字的平均值,您实际上不需要任何特殊函数:
a$mean = (a$high + a$low) / 2
对于这种简单的情况,这避免了任何转换为 matrix
以使用 apply
或 rowMeans
。
我有一个存储不同值的数据框。示例:
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 和一般的函数式语言有点陌生,所以我很确定还有更多 efficient/simple 方法可以实现。
如何以最聪明的方式实现这一点?
我们可以使用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
注意:这不是试图玷污其他答案的方法。它在大多数情况下都有效,而且速度也很快。
对于两个数字的平均值,您实际上不需要任何特殊函数:
a$mean = (a$high + a$low) / 2
对于这种简单的情况,这避免了任何转换为 matrix
以使用 apply
或 rowMeans
。