Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/67.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 如何仅选择非中断号码?_R_Selection - Fatal编程技术网

R 如何仅选择非中断号码?

R 如何仅选择非中断号码?,r,selection,R,Selection,我有两个向量: x<-c(0,1,0,2,3,0,1,1,0,2) y<-c("00:01:00","00:02:00","00:03:00","00:04:00","00:05:00", "00:06:00","00:07:00","00:08:00","00:09:00","00:10:00") 我们构建了这样一个脚本,但是对于一个大的数据集,这需要时间。有更优雅的解决方案吗?我想知道,为什么df 您的子问题:df+1很高兴看到第一个问题的可复制示例!您确定所需的输出

我有两个向量:

x<-c(0,1,0,2,3,0,1,1,0,2)
y<-c("00:01:00","00:02:00","00:03:00","00:04:00","00:05:00",
     "00:06:00","00:07:00","00:08:00","00:09:00","00:10:00")
我们构建了这样一个脚本,但是对于一个大的数据集,这需要时间。有更优雅的解决方案吗?我想知道,为什么
df

您的子问题:
df+1很高兴看到第一个问题的可复制示例!您确定所需的输出正确吗?您是否只想对
x
不是0的部分进行子集划分?是的,这是正确的问题。我需要选择一天中笼中动物的运动活动首次出现的时间。用0,1,0表示的值通常只是意外注册。哇,用漂亮的脚本和完美的解释快速回复吧!非常感谢。
y        x
00:04:00 2
00:05:00 3
00:07:00 1
00:08:00 1
aaa<-data.frame(y,x)
df<-NULL
for (i in 1:length(aaa$x)){
  bbb<-ifelse((aaa$x[i]*aaa$x[i+1])!=0, 
              aaa$x[i], 
              ifelse((aaa$x[i]*aaa$x[i-1])!=0, 
                     aaa$x[i], 
                     NA))
  df<-rbind(bbb,df)
}
df<-data.frame(rev(df))
aaa$x<-df$rev.df.
bbb<-na.omit(aaa)
bbb
aaa <- data.frame(y,x)
rles <- rle(aaa$x == 0)
bbb <- aaa[rep(rles$values == FALSE & rles$lengths >= 2, rles$lengths),]
> bbb
         y x
4 00:04:00 2
5 00:05:00 3
7 00:07:00 1
8 00:08:00 1
> aaa$x == 0
 [1]  TRUE FALSE  TRUE FALSE FALSE  TRUE FALSE FALSE  TRUE FALSE
> rle(aaa$x == 0)
Run Length Encoding
  lengths: int [1:8] 1 1 1 2 1 2 1 1
  values : logi [1:8] TRUE FALSE TRUE FALSE TRUE FALSE ...
> rles$values == FALSE & rles$lengths >= 2
[1] FALSE FALSE FALSE  TRUE FALSE  TRUE FALSE FALSE
> rep(rles$values == FALSE & rles$lengths >= 2, rles$lengths)
 [1] FALSE FALSE FALSE  TRUE  TRUE FALSE  TRUE  TRUE FALSE FALSE
> aaa[rep(rles$values == FALSE & rles$lengths >= 2, rles$lengths),]
         y x
4 00:04:00 2
5 00:05:00 3
7 00:07:00 1
8 00:08:00 1