小编Dea*_*Vil的帖子

R中的一组间隔的子集数据

我想根据一组间隔从向量中排除值.

示例数据:

mydata <-  sort(runif(100,0,300))
mIntervals <- data.frame(start = c(2,50,97,159) , end = c(5,75, 120, 160))
Run Code Online (Sandbox Code Playgroud)

解决方案1:使用简单的子集() - 不合适 - mIntervals的长度可能非常大

解决方案2:使用嵌套for循环:

valid <- vector(length(mydata))
valid <- TRUE
for(i in 1:length(mydata){
 for(j in 1:length(mIntervals){
  if(mydata[i] > mIntervals[j,]$start & mydata[i] < mIntervals[j,]$end){
   valid[i] <- FALSE
  }
 }
} 
mydata[valid]
Run Code Online (Sandbox Code Playgroud)

这种解决方案在R中耗时太长

解决方案3:函数findIntervals

   require(FSA)
   valid <- findInterval(mydata, sort(c(mIntervals$start, mIntervals$end)))
   mydata[is.even(valid)]
Run Code Online (Sandbox Code Playgroud)

解决方案4:以某种方式使用包'间隔',但也没有合适的功能(可能是interval_overlap())

这里已经讨论了相似(但不完全相同)的问题.但是有整数向量的解决方案,而不是连续变量.

我没有更多的想法.解决方案号 3似乎是最好的,但我不喜欢它 - 它不健壮 - 你必须检查重叠间隔等.

这个非常简单的问题有没有更好的解决方案?谢谢

真实数据:我有时会测量光强度(日期时间,强度).我还有测量设备维护(开始,结束)的日期时间间隔.现在我想清理数据=排除在维护期间测量的值(有效!).

r subset

4
推荐指数
2
解决办法
1239
查看次数

标签 统计

r ×1

subset ×1