在 R 中的 if...else 语句中计数以填充向量?

Counter in if...else statement in R to fill vector?

我正在尝试使用依赖于另一个 table 的数字的简单计算来填充长度为 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] 等于 .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.1[, "nrow"] 中的值与 table6.row 中的值相加。然后,将该总和除以 N,在本例中为 8。您可以使用基 R.

中的函数 aggregate 来做到这一点
N <- 8
goalvector <- aggregate(x ~ y, data.frame(x = table4.1[, "nrow"], y = table6.row), sum)$x / N
goalvector

输出

[1] 0.125 0.500 0.250 0.125