根据时间序列中的条件对行进行分组并忽略错误值

时间:2016-03-16 14:47:07

标签: r grouping

我有一组不同采样间隔的动物位置。我想要做的是对采样间隔与某个标准匹配的序列进行分组和标记(例如,低于某个值)。 这是this question的修订版,标记为this one的副本。这个修订问题的不同之处在于,所有与标准不匹配的值都应该被忽略,而不是标记。

让我用一些虚拟数据来说明:

start <- Sys.time()
timediff <- c(rep(5,3),rep(20,3),rep(5,2))
timediff <- cumsum(timediff)

# Set up a dataframe with a couple of time values
df <- data.frame(TimeDate = start + timediff)

# For understanding purposes, I will note the time differences in a separate column
df$TimeDiff <- c(diff(df$TimeDate),NA)

使用@Josh O'Brien的answer,可以定义一个对符合特定条件的值进行分组的函数。

number.groups <- function(input){
  input[is.na(input)] <- FALSE # to eliminate NA
  return(head(cumsum(c(TRUE,!input)),-1))
}

# Define the criteria and apply the function
df$Group <- number.groups(df$TimeDiff <= 5)

# output
             TimeDate TimeDiff Group
1 2016-03-16 15:41:51        5     1
2 2016-03-16 15:41:56        5     1
3 2016-03-16 15:42:01       20     1
4 2016-03-16 15:42:21       20     2
5 2016-03-16 15:42:41       20     3
6 2016-03-16 15:43:01        5     4
7 2016-03-16 15:43:06        5     4
8 2016-03-16 15:43:11       NA     4

这里的问题是第4行和第5行被标记为单独的组,而不是被忽略。有没有办法确保不属于某个组的值不被分组(例如保持NA)?

1 个答案:

答案 0 :(得分:1)

我想我找到了解决问题的方法。方法是将每个值与下一个值进行比较,并使用此信息来消除唯一值。然后,将剩余值重新命名为因子。

location ~ .php$ { 
if (!-e $request_filename) { rewrite / /index.php last; }
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    fastcgi_param  MAGE_RUN_CODE default;
    fastcgi_param  MAGE_RUN_TYPE store;
    include        fastcgi_params; ## See /etc/nginx/fastcgi_params;

    ## Tweak fastcgi buffers, just in case.
    fastcgi_buffer_size 128k;
    fastcgi_buffers 256 4k;
    fastcgi_busy_buffers_size 256k;
    fastcgi_temp_file_write_size 256k;
}