首页 > 解决方案 > 为 R 中的连续 TRUE 创建新列

问题描述

如果连续获胜的次数为 2、3 等,我想创建新的列,将 TRUE。所以我希望第 3、6、7、8 行在名为“twoconswins”的新列和第 7、8 行中为 TRUE在一个名为“threeconswins”等的新列中是正确的。这样做的最佳方法是什么?

>         id        date team teamscore opponent opponentscore home   win
>9         9 2005-10-05  DET         5      STL             1    1  TRUE
>38       38 2005-10-09  DET         6      CAL             3    1  TRUE
>48       48 2005-10-10  DET         2      VAN             4    1 FALSE
>88       88 2005-10-17  DET         3      SJS             2    1  TRUE
>110     110 2005-10-21  DET         3      ANA             2    1  TRUE
>148     148 2005-10-27  DET         5      CHI             2    1  TRUE
>179     179 2005-11-01  DET         4      CHI             1    1  TRUE
>194     194 2005-11-03  DET         3      EDM             4    1 FALSE
>212     212 2005-11-05  DET         1      PHO             4    1 FALSE

标签: r

解决方案


我假设第 1 行应该是标题,所以实际上第 2、5、6 和 7 行对于“twoconswins”应该评估为 TRUE,而第 6 行和第 7 行对于“threeconswins”应该评估为 TRUE。

你可以这样做:

library(data.table)
df$twoconswins <-  (df$win & shift(df$win, 1, NA)) == TRUE
df$threeconswins <- (df$win & shift(df$win, 1, NA) & shift(df$win, 2, NA)) == TRUE

我认为这可能会更加矢量化,特别是如果连续 50 次获胜也是可能的,并且您也想为此创建列。


推荐阅读