用于确定r中连续重复100次的代码

时间:2018-01-30 17:42:42

标签: r

我正在处理以100Hz(每秒100个样本)收集的数据,并且需要在设备收集部分秒时开始剪切数据。我从时间戳中抽出秒数并将其设为自己的列。我的数据示例如

Seconds
19
19
19
19
19
20
20
20
...Continue until there are 100 samples at 20 seconds, then switch to 21

我正在寻找能够切断'19'秒(前5个数字)的代码,因此我的第一个数据将包含所有100个样本。我正在尝试使用能够连续重复100次的函数,但不确定这是否是最好的方法。

感谢。

2 个答案:

答案 0 :(得分:1)

首先通过查看第一秒计数的实例是否少于预期来决定是否需要在开始时删除任何内容:

const users = {
 adam: {
   age: 28,
   extraInfo: 'foobar',
 },
 brad: {
   age: 31,
   extraInfo: 'foobar',
 },
 jef: {
   age: 12,
   extraInfo: 'baarfoo',
 },
};

var maxAge;
for(var key in users){
  if(!maxAge || users[key].age > maxAge.age){
    maxAge = users[key];
  }
}

console.log('Highest Age is:');
console.log(maxAge);

然后行动:

nsec = 100
nfirsts = which.min(df$seconds == df$seconds[1])-1
cutme = nfirsts < nsec

这是一个功能:

if(cutme){
  df = df[(nfirsts+1):nrow(df),,drop=FALSE]
}

使用类似:

chop_start = function(d, col,  n){
 nfirsts = which.min(d[[col]] == d[[col]][1])-1
 if(nfirsts < n){
  return(d[(nfirsts-1):nrow(d),,drop=FALSE])
 }
 return(d)
}

编辑:不要做两次同样的事情

Edit2:如果df = chop_start(df, "seconds", 100) 在第一个which.min值处停止而不扫描整个数据框,则可能会更快。

答案 1 :(得分:0)

我希望这有助于您走上正确的轨道!


library(dplyr)

df <- data.frame(seconds = c(rep(19, 5), rep(20, 100), rep(21, 100)))

df %>%
  group_by(seconds) %>%
  filter(n() ==100) %>%
  ungroup()
#> # A tibble: 200 x 1
#>    seconds
#>      <dbl>
#>  1      20
#>  2      20
#>  3      20
#>  4      20
#>  5      20
#>  6      20
#>  7      20
#>  8      20
#>  9      20
#> 10      20
#> # ... with 190 more rows