Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于确定某个内容在r中的一行中重复100次的代码_R - Fatal编程技术网

用于确定某个内容在r中的一行中重复100次的代码

用于确定某个内容在r中的一行中重复100次的代码,r,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个样本。我正在尝试使用一些函数,这些函数

我正在处理以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次,但不确定这是否是最好的方法


谢谢。

我希望这能帮助你走上正轨


库(dplyr)
df%
分组依据(秒)%>%
过滤器(n()==100)%>%
解组()
#>#A tible:200 x 1
#>秒
#>      
#>  1      20
#>  2      20
#>  3      20
#>  4      20
#>  5      20
#>  6      20
#>  7      20
#>  8      20
#>  9      20
#> 10      20
#> # ... 还有190行

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

nsec = 100
nfirsts = which.min(df$seconds == df$seconds[1])-1
cutme = nfirsts < nsec
这里有一个函数:

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:如果
哪个.min
在第一个
FALSE
值处停止,而不扫描整个数据帧,这可能会更快。

?rle
……如果从数据文件中至少包含两列,这可能更容易理解。数据文件的格式是什么?是CSV吗?还有什么?它正在以.csv文件的形式读入。它是R中的data.frame。文件中的其他列是加速度数据。我正在删除在第一整秒之前收集的加速度数据,因此我所有文件上的时间戳都从第二秒开始。这非常有效!非常感谢你的帮助!只需要检查前100条记录,而不是整个数据帧。@ngm good point,可能会将测试更改为
which.min(d[[col]][1:n]==d[[col]][1])
-注意像
d
这样没有>100行的边缘情况。。。
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)
}
df = chop_start(df, "seconds", 100)