r - 如何在 r 中找到数据框中任何 2 列的几何平均值并将其存储在新列中?
问题描述
gm={}
for (r in 1:nrow(dat1)){
x={}
for (m in 1:ncol(dat1)){
for (n in m+1:ncol(dat1)){
x[r]=x[r]+sqrt(dat1[r,m]*dat1[r,n])
gm[[r]]=x[r]
r=r+1
}
}
}
这里 dat1 是我的数据框。我正在创建一个空列表并尝试附加它,但它给了我空结果。
解决方案
下面的函数查找 data.frame 列的所有成对组合并计算它们的几何平均值。
geomMean <- function(x, m = 2){
gmean <- function(x, na.rm = FALSE) {
prod(x, na.rm = na.rm)^(1/length(x))
}
#
inx <- seq_len(ncol(x))
y <- combn(inx, m, function(i){
apply(x[, i], 1, gmean)
})
dimnames(y) <- list(rownames(x),
combn(names(x), m, paste, collapse = "_"))
as.data.frame(y)
}
geomMean(mtcars)
使用Allan Cameron 答案中的数据,尽管输出形式不同,但结果是相同的。
geomMean(dat1)
# col1_col2
#1 2.000000
#2 2.000000
#3 6.928203
#4 5.000000
#5 4.242641
#6 8.366600
#7 1.732051
#8 8.485281
#9 5.291503
#10 9.486833
推荐阅读
- java - Hadoop 3.1 构建在“protoc --version”失败
- javascript - 在 JavaScript 中从 HTML 源中提取 JSON
- c# - do while循环中的错误
- angular - Immutable.js 在 Angular 的 *ngFor 中访问值
- django - django ApiView 登录返回 404
- javascript - TypeError: require(...) 不是一个函数 Express.js
- reactjs - 对 aws-amplify 的反应使用会生成“未定义要求”错误
- android - 在 Android Studio 中更新外部库
- apache-spark - 截断表后刷新的缓存数据帧
- javascript - 将节点元素转换为图像