我有一个数据库,其中按足球比赛的顺序进行比赛。我想进行一个for循环,以检查射门得分(上一行)之前的比赛是否被另一支球队暂停。我尝试使用下面的[i-1],但不确定是否会因为出现错误而起作用。
for (i in 1:nrow(example)) {
if (example$field_goal_attempt[i] == 1 & example$timeout[i-1] == 1 & example$timeout_team[i-1] !=
example$posteam[i-1]) {
example$iced[i] == 1
} else {
example$iced[i] == 0
}
}
example <- data.frame(game_id = c(10,10,10,10,10,13,13,13,13,13),
field_goal_attempted = c(0,0,0,1,0,0,0,0,0,0), time_out =
c(0,0,1,0,0,0,0,0,0,0), posteam =
c("PIT","PIT","PIT","PIT","PIT","ATL","ATL","WAS","WAS","WAS"), timeout_team
= c(NA, NA, "TEN",NA,NA,NA,NA,NA,NA,NA))
在新窗口中显示清除输出展开/折叠输出 if(example $ field_goal_attempt [i] == 1&example $ timeout [i-: 参数的长度为零
答案 0 :(得分:0)
您基本上可以通过两种方式查看问题的逻辑:
for
循环播放剧情,就像您遇到的情况一样-也就是说,i
代表一场是射门得分,i-1
代表上一场。根据{{1}}的建议,您将从2开始:@SmokeyShakers
请注意,我还建议您使用for (i in 2:nrow(example)) {
if (example$field_goal_attempt[i] == 1 && example$timeout[i-1] == 1 && example$timeout_team[i-1] != example$posteam[i-1]) {
example$iced[i] <- 1
} else {
example$iced[i] <- 0
}
}
而不是&&
,因为在前一种情况下,逻辑语句被一个一个地求值,并在第一个{ {1}},而后者(&
)评估FALSE
语句的所有部分,即使遇到错误的语句也是如此,从而浪费了计算时间。
此外,根据评论中&
的建议,我还用赋值运算符if
替换了@Jorge
,因为在我看来您想分配{ {1}}或==
不会评估逻辑语句<-
分别等于1
或0
。
example$iced[i]
表示的潜在超时,目标尝试为1
,并且您的循环需要在1之前终止。0