在R区发现不成功的传球导致失误(被对手拦截)

在R区发现不成功的传球导致失误(被对手拦截),r,dt,R,Dt,我试图找出每个球员的失败传球次数,从而导致对手的失误(因此拦截)。请参见列type_name和result_name,发生这种情况的情况在第43行和第46行(因此,第42行和第45行是不成功的通过,应予以计数) 总而言之:值TRUE应该只出现在第42行和第45行,因为这些失败的传球导致对手成功拦截。这里有一个tidyverse解决方案,您也可以使用: library(dplyr) df1 %>% mutate(to_turnover = ifelse((type_name == &q

我试图找出每个球员的失败传球次数,从而导致对手的失误(因此拦截)。请参见列
type_name
result_name
,发生这种情况的情况在第43行和第46行(因此,第42行和第45行是不成功的通过,应予以计数)


总而言之:值TRUE应该只出现在第42行和第45行,因为这些失败的传球导致对手成功拦截。

这里有一个
tidyverse
解决方案,您也可以使用:

library(dplyr)

df1 %>%
  mutate(to_turnover = ifelse((type_name == "pass" & result_name == "fail") & 
                                (lead(type_name) == "interception" & lead(result_name) == "success"), 
                              TRUE, NA))


下面是一个
数据表
方法

library(data.table)
setDT(df1)
df1[type_name == "pass" &
    result_name == "fail" & 
    shift(type_name, type = "lead") == "interception" & 
    shift(result_name, type = "lead") == "success", 
    to_turnover := TRUE]

我对你如何选择你的观察结果感到有点困惑。请你再解释一下你选择观察的标准好吗?为什么不计算行
37
,那些成功的拦截,例如行
43
46
(我稍微更改了数据帧,并添加了另一列:
时间\秒
)。数据帧按顺序显示匹配的一部分(可以从每行的时间秒数增加中看出)。因此,我想获得这样的情况:
行I
通过=='fail
,而
行I+1
拦截=='success
。因此,标准应该是:
type\u name[i]==通过和结果\u name[i]==失败
,然后
type\u name[i+1]==拦截和结果\u name[i+1]==成功
谢谢!这确实是应该采取的两行措施。但是,他们应该在总数据帧中返回一个T/F,就像在Wimpel his答案中所做的那样。你的意思是你想添加一个带有逻辑值的额外列吗?是的,所以最终答案应该显示我的问题中所述的总输出OK我修改了我的代码,这样就得到了你想要的输出。
library(dplyr)

df1 %>%
  mutate(to_turnover = ifelse((type_name == "pass" & result_name == "fail") & 
                                (lead(type_name) == "interception" & lead(result_name) == "success"), 
                              TRUE, NA))

library(data.table)
setDT(df1)
df1[type_name == "pass" &
    result_name == "fail" & 
    shift(type_name, type = "lead") == "interception" & 
    shift(result_name, type = "lead") == "success", 
    to_turnover := TRUE]