我是使用R的新手,并对数据过滤有疑问。我有一个相当大的.csv文件,其中的数据存储在多个行和列中。
一行包含步骤编号,我感兴趣的是从600到700的步骤。可能会发生600到700之间出现较低的数字(如5,10,20等)。
我试过了:
data_interest <- subset(data, data$step >=600 & data$step <=700)
这仅返回步数600到700的数据。我想在步骤编号600出现时启动“保存序列”,并在步骤编号700显示时结束(包括可能出现的步骤编号)介于两者之间。)
我希望有人可以提供帮助。谢谢: - )
答案 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