对于r中的循环来创建子集

时间:2015-07-23 14:37:33

标签: r for-loop

我正在尝试从现有数据框创建一个子集,其中变量“Readings”显示的值大于上一个读数,以及“Time”变量的相应行条目。 我在下面写的代码只生成“NA”条目。

Data$Readings<-0
for (i in 1:nrow(Data)){
Pos.Readings<-Data[Data$Readings[i+1]>Data$Readings[i],]
}
Pos.Readings

如果读数变量中有i + 1&gt; i,我希望新数据框显示i和i + 1的行条目。

以下是数据的示例

Time      Readings
12:00:00  0.1
12:00:01  0.3
12:00:02  0.45
12:00:03  0.2
12:00:04  0.02
12:00:05  -0.7
12:00:06  -0.25
12:00:07  0.27

所以,我的目标应该是:

Time      Readings
12:00:00  0.1
12:00:01  0.3
12:00:02  0.45
12:00:05  -0.7
12:00:06  -0.25
12:00:07  0.27

我可能已经错误地写了for循环,但我希望我的意图对所有人都清楚。

1 个答案:

答案 0 :(得分:1)

看起来你关心的是读数的绝对值大于前一个。如果是这种情况,请尝试:

comparisons <- Data$Readings[-nrow(Data)]
Data$prevReading <- 0 #or just a really small number that automatically keeps row 1
Data$prevReading[-1] <- comparisons

subsetData <- subset(Data, abs(prevReading) < abs(Readings))
subsetData <- subsetData[c("Time", "Readings")]

如果您想要比较实际读数而不是绝对值,那么在子集时只需删除两个abs()命令。