R条件分组行和组编号

时间:2015-09-07 10:55:46

标签: r grouping

我使用数据帧进行飞行运动(约1百万行* 108个变量),并希望对满足某个标准的阶段(即某个变量的值)进行分组。为了识别这些组,我想给它们编号。 作为一个R新手,我让它适合我的情况。现在我正在寻找一种更优雅的方式。特别是,我想克服"无用的"小组编号的差距。 我提供了我的dplyr数据帧的简化示例,其阈值标准的值为THR。行按时间戳排序(因此,我可以在此处截断它)。

THR <- c(13,17,19,22,21,19,17,12,12,17,20,20,20,17,17,13, 20,20,17,13)
df  <- as.data.frame(THR)
df  <- tbl_df(df)

标记符合(不符合)标准的所有行

df  <- mutate(df, CRIT = THR < 19)

通过以下内容,我设法有条件地&#34; cumsum&#34;获得一个独特的群体识别:

df <- mutate(df, GRP = ifelse(CRIT == 1, 0, cumsum(CRIT))
df
    x CRIT GRP
1  13 TRUE   0
2  17 TRUE   0
3  19 FALSE  2          
4  22 FALSE  2
5  21 FALSE  2
6  19 FALSE  2
7  17 TRUE   0
8  12 TRUE   0
9  12 TRUE   0
10 17 TRUE   0
11 20 FALSE  6
12 20 FALSE  6

虽然这可以解决问题,但我可以使用group_by对组进行操作(例如汇总,过滤),编号并不理想,如示例输出中所示。在这个例子中,1st编号为2,第二组编号为6,与cumsum()结果一致。

如果有人能对我有所了解,我将不胜感激。我无法在其他帖子中找到合适的解决方案。

2 个答案:

答案 0 :(得分:1)

我不能完全避免创建CRIT的初步步骤,但我建议在创建时添加cumsum,然后运行一个简单的{{1} } / cumsum结束它。此外,如果您不需要不符合条件的组,最好分配diff而不是仅使用零等随机数。这可能是NA总结(同样,您根本不需要data.table步骤)

df <- tbl_df(df)

答案 1 :(得分:0)

你可以这样做:

function highlight() {
    $('#example tbody').on('click', 'tr', function () {
        if ($(this).hasClass('selected')) {
            $(this).removeClass('selected');
        } else {
            table.$('tr.selected').removeClass('selected');
            $(this).addClass('selected');
        }
    });
}

$(document).ready(function () {

    // Call the function at document ready
    highlight();

    // Call the ajax and the function every 5 seconds
    setInterval( function () {
        table.ajax.reload(null, false);
        highlight();
    }, 5000 );

});