我使用数据帧进行飞行运动(约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()结果一致。
如果有人能对我有所了解,我将不胜感激。我无法在其他帖子中找到合适的解决方案。
答案 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 );
});