【发布时间】:2022-01-05 20:34:32
【问题描述】:
我正在尝试使用依赖于另一个表中的数字的简单计算来填充长度为 4 的向量。最右边的列“nrow”是table 4.1 中行的总和。 Table6.row是表示行名中元素个数的向量:99=0,a,b,d都=1,bd=2,abd=3。我想用table4.1[1, "nrow"] 和N 的商来填充goalvector[1]。 goalvector[2] 将填充table4.1[2:4, "nrow"] 和N 之和的商,因为table4.1 的第2:4 行都表示单个元素(a、b 和d)。以下是我的可重现示例:
table6.row <- c(0,1,1,1,2,3)
table4.1 <- matrix(data=c(0,0,0,1,1,0,0,0,1,0,1,1,1,2,0,0,0,0,0,0,0,0,0,0,1,2,1,1,2,1), nrow=6, ncol=5)
colnames(table4.1) <- c("U1", "U2", "U3", "U4", "nrow")
rownames(table4.1) <- c("99", "a", "b", "d", "bd", "abd")
下面是我尝试运行的带有 if...else 语句的循环,以最终在末尾创建向量 (goalvector)。
goalvector <- numeric()
n.card <- 0
P <- 1
N <- 8
for (i in ncol(table4.1)) {
if(table6.row[i]==0) {
n.card <- table4.1[i, "nrow"]
} else if(table6.row[i]==table6.row[i-1]) {
n.card <- n.card + table4.1[i, "nrow"]
} else {
goalvector[P] <- n.card/N
n.card <- 0
P <- P+1
n.card <- table4.1[i,"nrow"]
}
}
我想要的输出:
goalvector <- c(.125, .5, .25, .125)
其中goalvector[1] 等于0.125 或1/8,即table4.1[1,"nrow"] 和N 的商。 goalvector[2] 等于 0.5 或 4/8,这是 table4.1[2:4, "nrow"] 与 N 之和,因为 table4.1[,"nrow"] 的第 2:4 行都表示行名中包含单个元素的行(a、b 和d)。 goalvector[3] 等于 0.25 或 2/8,即 table4.1[5, "nrow"] 和 N 的商,因为这是唯一代表两个元素 (bd) 的行。
【问题讨论】:
-
table4在哪里?我们只能看到table4.1 -
抱歉,刚刚更新了。应该都是table4.1
-
你能解释一下你是如何从数学上从表格中得到
.125的吗? -
刚刚更新了这个问题来回答这个问题。很抱歉造成混乱,如果仍然不清楚,我可以重写整个问题。
标签: r loops if-statement matrix counter