首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在R中其他数据帧值的基础上填充数据帧值的创造性循环

在R中其他数据帧值的基础上填充数据帧值的创造性循环
EN

Stack Overflow用户
提问于 2016-10-11 23:12:04
回答 1查看 53关注 0票数 0

对于那些熟悉层次分析法的人来说,这应该更直观一些.

使用以下代码创建data.frame criteria

代码语言:javascript
复制
c <- 5
cri_names <- c("Applicability", "Deployment", "Scalability", "Ease-of-Use", "TCO")
c1 <- data.frame(c = rep(0, c))
criteria <- data.frame(do.call("cbind", rep(c1, c)))
colnames(criteria) <- cri_names
rownames(criteria) <- cri_names

cvs <- data.frame(c1 = c(1, 5, 3, 1, 3),
              c2 = c(1, 1, 1/3, 1/5, 1/5),
              c3 = c(1, 1, 1, 1/3, 3),
              c4 = c(1, 1, 1, 1, 5),
              c5 = c(1, 1, 1, 1, 1))

for(v in c(1:ncol(cvs))) {
  criteria[v, ] <- cvs[, v]
}

print(criteria)

#              Applicability Deployment Scalability Ease-of-Use TCO
#Applicability             1          5   3.0000000   1.0000000 3.0
#Deployment                1          1   0.3333333   0.2000000 0.2
#Scalability               1          1   1.0000000   0.3333333 3.0
#Ease-of-Use               1          1   1.0000000   1.0000000 5.0
#TCO                       1          1   1.0000000   1.0000000 1.0

我现在要做的是将每个1替换为criteria[x, x]左边的与其相反值相反的值。例如:

代码语言:javascript
复制
criteria["Deployment", "Applicability"] <- 1/criteria["Applicability", "Deployment"]

最终结果应该如下所示:

代码语言:javascript
复制
#              Applicability Deployment Scalability Ease-of-Use TCO
#Applicability     1.0000000          5   3.0000000   1.0000000 3.0
#Deployment        0.2000000          1   0.3333333   0.2000000 0.2
#Scalability       0.3333333          3   1.0000000   0.3333333 3.0
#Ease-of-Use       1.0000000          5   3.0000000   1.0000000 5.0
#TCO               0.3333333          5   0.3333333   0.2000000 1.0

我很有信心,这可以用嵌套的for循环来完成,但我不能很好地掌握它,而且我的时间已经不多了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-11 23:23:30

我想这就是你要找的:

代码语言:javascript
复制
l <- lower.tri(criteria)
criteria[l] <- 1/t(criteria)[l]

print(criteria)
##               Applicability Deployment Scalability Ease-of-Use TCO
## Applicability     1.0000000          5   3.0000000   1.0000000 3.0
## Deployment        0.2000000          1   0.3333333   0.2000000 0.2
## Scalability       0.3333333          3   1.0000000   0.3333333 3.0
## Ease-of-Use       1.0000000          5   3.0000000   1.0000000 5.0
## TCO               0.3333333          5   0.3333333   0.2000000 1.0

FYI,这不管用:

代码语言:javascript
复制
criteria[lower.tri(criteria)] <- 1/criteria[upper.tri(criteria)]

您希望用上三角形的行反填充下三角形的列。但是,R按列读取矩阵,因此criteria[upper.tri(criteria)]将返回以下内容:

代码语言:javascript
复制
 [1] 5.0000000 3.0000000 0.3333333 1.0000000 0.2000000 0.3333333 3.0000000 0.2000000 3.0000000 5.0000000

这可以通过采用转置和得到下三角形来解决,这相当于取上三角形的行。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39988167

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档