我有一个数据框 DF
,三列和 n 行如下所示:
Month Year Default
1 2015 T
2 2015 T
3 2015 F
4 2015 T
5 2015 T
6 2015 T
7 2015 F
我想检查一卷中是否有 3 个 T 并继续进行,然后将所有起始年份和月份打印到一个新的 DF 中。
我需要获得如上所示的输出。输出应该是这样的:
Month Year
4 2015
最佳答案
这是使用 data.table
的尝试 devel version on GH和新的 rleid
函数
library(data.table) # v 1.9.5+
setDT(df)[, indx := rleid(Default)]
df[(Default), if(.N > 2) .SD[1L], by = indx]
# indx Month Year Default
# 1: 3 4 2015 TRUE
我们基本上在这里做的是在 Default
中为每个连续事件设置一个唯一索引,然后仅在 Default == TRUE
时查看我们检查每个group 如果组大小大于 2,则选择该组中的第一个实例。
一个较短的版本(由@Arun 提出)是
setDT(df)[, if(Default && .N > 2L) .SD[1L], by = .(indx = rleid(Default), Default)]
关于R:窗口函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31574057/