我是使用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