r - 在循环中划分加权平均值
问题描述
考虑以下数据:
datamichael <- data.frame(x=c(100,200,300,500), y=c(75,100,300,400), row.names = LETTERS[1:4])
dataewan <- data.frame(x=c(200,50,200,600), y=c(100,100,400,300), row.names = LETTERS[1:4])
datatom <- data.frame(x=c(100,150,400,200), y=c(100,100,400,300), row.names = LETTERS[1:4])
datamichaeldataewan <- rbind(datamichael,dataewan)
datamichaeldatatom <- rbind(datamichael,datatom)
dataewandatamichael <- rbind(dataewan, datamichael)
dataewandatatom <- rbind(dataewan, datatom)
datatomdatamichael <- rbind(datatom, datamichael)
datatomdataewan <- rbind(datatom, dataewan)
library(Benchmarking)
effmichaelewan <- dea(datamichaeldataewan$x,datamichaeldataewan$y, XREF=datamichael$x, YREF=datamichael$y)
effmichaeltom <- dea(datamichaeldatatom$x,datamichaeldatatom$y, XREF=datamichael$x, YREF=datamichael$y)
effewanmichael <- dea(dataewandatamichael$x,dataewandatamichael$y, XREF=dataewan$x, YREF=dataewan$y)
effewantom <- dea(dataewandatatom$x,dataewandatatom$y, XREF=dataewan$x, YREF=dataewan$y)
efftommichael <- dea(datatomdatamichael$x,datatomdatamichael$y, XREF=datatom$x, YREF=datatom$y)
efftomewan <- dea(datatomdataewan$x,datatomdataewan$y, XREF=datatom$x, YREF=datatom$y)
我知道我的命名约定有点混乱。现在我想计算迈克尔的加权平均值。那是:
result1 <- (weighted.mean(eff(effmichaelewan), datamichaeldataewan$y)/
weighted.mean(eff(effewanmichael), dataewandatamichael$y))
result2 <- (weighted.mean(eff(effmichaeltom), datamichaeldatatom$y)/
weighted.mean(eff(efftommichael), datatomdatamichael$y))
是否可以通过循环进行计算?因为我有两个以上的合并数据,Tom 的数据应该与之分开。
解决方案
你可以做:
L <- list(datamichael, dataewan, datatom)
library(Benchmarking)
result <- function(x) {
d1 <- rbind(x[[1]], x[[2]])
d2 <- rbind(x[[2]], x[[1]])
eff.d1 <- dea(d1$x, d1$y)
eff.d2 <- dea(d2$x, d2$y)
weighted.mean(eff(eff.d1), d1$y) / weighted.mean(eff(eff.d2), d2$y)
}
combn(L, 2, FUN=result)
要了解您可以执行的名称:
n <- c("michael", "ewan", "tom")
combn(n, 2)
数据:
datamichael <- data.frame(x=c(100,200,300,500), y=c(75,100,300,400), row.names = LETTERS[1:4])
dataewan <- data.frame(x=c(200,50,200,600), y=c(100,100,400,300), row.names = LETTERS[1:4])
datatom <- data.frame(x=c(100,150,400,200), y=c(100,100,400,300), row.names = LETTERS[1:4])
推荐阅读
- angular - Angular 7 中的路由和授权
- javascript - 锚标记不能使 div 可点击
- android - 将 Android Job 迁移到 Android Work 管理器
- python - 如何使用 Python 按值搜索嵌套的 JSON
- java - 更新依赖项后使用 TableGenerator 的 ConstraintViolationException
- matlab - matlab中的两个最小值
- json - 从根为数组的 jsonpath 获取元素值
- cordova - 我想在应用程序从 ionic3 中的堆栈中删除时执行函数
- html - 使用 DOT 语法从父目录添加 HTML 文件
- logging - 我想为每种类型登录不同的文件,并为每个线程登录不同的目录