R - 筛选行(保留两个值之间的所有数据)



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

一行包含步数,我对从 600 到 700 的步骤感兴趣。600 到 700 之间可能会出现较小的数字(如 5、10、20 等(。

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

这将仅返回从 600 到 700 的步骤编号的数据。我想在步骤编号 600 出现时开始"保存序列",并在步骤编号 700 出现时结束它(包括中间可能出现的较低步骤编号(。

我希望有人能帮忙。谢谢 :-(

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

最新更新