R - 过滤行(保持两个值之间的所有数据)

时间:2018-02-01 10:25:23

标签: r

我是使用R的新手,并对数据过滤有疑问。我有一个相当大的.csv文件,其中的数据存储在多个行和列中。

一行包含步骤编号,我感兴趣的是从600到700的步骤。可能会发生600到700之间出现较低的数字(如5,10,20等)。

我试过了:     data_interest <- subset(data, data$step >=600 & data$step <=700)

这仅返回步数600到700的数据。我想在步骤编号600出现时启动“保存序列”,并在步骤编号700显示时结束(包括可能出现的步骤编号)介于两者之间。)

我希望有人可以提供帮助。谢谢: - )

1 个答案:

答案 0 :(得分:1)

data_interest = data[which(data$step >= 600)[1]:which(data$step >= 700)[1], ]

使用which( condition )[1],您可以获得符合条件的第一个匹配元素的索引。使用上面的代码,您将获得步数高于600的第一次出现之间的所有元素,直到700.

示例:

data = data.frame(step = c(5, 6, 600, 2, 700, 3, 4, 5))

data_interest = data[which(data$step >= 600)[1]:which(data$step >= 700)[1], ]

print(data_interest)  
[1] 600   2 700

编辑:如果有多个间隔,则以下for循环将执行此操作。

data = data.frame(step = c(5,6,600,2,700,3,4,5,600,10,700,3,4,5))
current_status <- F
select_vec = rep(F, nrow(data))
for(i in 1:nrow(data)){
  if(data$step[i] >= 600){
    current_status <- T 
  }
  select_vec[i] <- current_status
  if(current_status & data$step[i] >= 700){
    current_status <- F
  }
}
data_interest <- data[select_vec,]   

print(data_interest)
[1] 600   2 700 600  10 700