对于特定任务,我编写了以下R脚本:
pred <- c(0.1, 0.1, 0.1, 0.2, 0.2, 0.3, 0.3)
grp <- as.factor(c(1, 1, 2, 2, 1, 1, 1))
cut <- unique(pred)
cut_n <- length(cut)
n <- length(pred)
class_1 <- numeric(cut_n)
class_2 <- numeric(cut_n)
curr_cut <- cut[1]
class_1_c <- 0
class_2_c <- 0
j <- 1
for (i in 1:n){
if (curr_cut != pred[i]) {
j <- j + 1
curr_cut <- pred[i]
}
if (grp[i] == levels(grp)[1])
class_1_c <- class_1_c + 1
else
class_2_c <- class_2_c + 1
class_1[j] <- class_1_c
class_2[j] <- class_2_c
}
cat("index:", cut, "\n")
cat("class1:", class_1, "\n")
cat("class2:", class_2, "\n")
我上面的目标是计算grp
中每个唯一值pred
中的因子的累计次数。例如,我得到以上输出:
index: 0.1 0.2 0.3
class1: 2 3 5
class2: 1 2 2
我是R的初学者,我对此几乎没有问题:
for
循环?非常感谢任何帮助。谢谢!
答案 0 :(得分:2)
您可以先使用table
table(grp, pred)
# pred
# grp 0.1 0.2 0.3
# 1 2 1 2
# 2 1 1 0
当然,这并不是你想要的。您需要累计总计,因此我们可以通过在每行中应用累积总和来调整此结果(转置以更好地匹配您的数据布局)
t(apply(table(grp, pred), 1, cumsum))
# grp 0.1 0.2 0.3
# 1 2 3 5
# 2 1 2 2