【发布时间】:2021-08-27 00:00:27
【问题描述】:
我正在尝试创建一个指标,用于指示项目被接受所需的“尝试”次数。我认为 for 循环是要走的路,但我在 R 中没有大量的循环经验,而且逻辑有点复杂。任何帮助/建议/反馈将不胜感激!
在玩具示例中,“accept”为“C”,向前迭代“try”的切换是提交 (A) 是否被重置 (B) 或提交 (A) 是否被接受 (C)。
在一个组内,如果事件顺序是 A > B 或 A > C,则将“try”向前迭代 1。否则,“try”计数应保持不变。显然,“真实”的例子比这个玩具例子要复杂得多。
目前,我只是想使尝试计数正确,而不用担心分组。
我不确定如何将 seq_along 限制为基本上停止在 [group_by %>% length(group) - 1]。有更好的选择吗?
df = data.frame(group = c(1,1,1,1,1,2,2,2,2),
event = c("A","B","A","A","C","A","B","A","C"))
df$try <- 0
for (i in seq_along(df$event)){
if (df$event[[i]] == "A" &
df$event[[i+1]] %in% c("B", "C"))
{
df$try[[i]] <- df$try + 1
} else {
df$try[[i]] <- df$try
}
}
# this essentially shows the correct answer (win = try + 1, loss = try),
# but has "df$event[[i + 1]] : subscript out of bounds",
# and I need to save the outcome so I can access later
df$try <- 0
for (i in seq_along(df$event)){
if (df$event[[i]] == "A" &
df$event[[i+1]] %in% c("B", "C"))
{
print("Win")
} else {
print("Loss")
}
}
我对玩具示例的预期(最终)答案是:try = c(1,1,1,2,2,1,1,2,2);每组 1 和 2 需要 2 次“尝试”才能被接受
【问题讨论】:
标签: r loops for-loop dplyr iteration