首页 > 解决方案 > 如何在 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 是我的数据框。我正在创建一个空列表并尝试附加它,但它给了我空结果。

标签: rlistdataframe

解决方案


下面的函数查找 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

推荐阅读