作为R的初学者,我无法从我的数据框中获取特定数据。我的数据每10分钟进行一次测量,每天测量144行。我想要做的是比较“电池可用”中的3个值(行)。和' date'符合特定条件的列:
batteryAvailable列表示一个百分比,在df中它是一个数值,范围为[0-100]
数据示例:
date batteryAvailable solarChargeTotal V2GTotal
1 05/05/2014 07:30 61 389.7 354.4
2 05/05/2014 07:40 61 389.7 354.4
3 05/05/2014 07:50 62 389.8 354.4
4 05/05/2014 08:00 62 389.8 354.4
5 05/05/2014 08:10 63 389.9 354.4
6 05/05/2014 08:20 63 389.9 354.4
7 05/05/2014 08:30 64 390 354.4
8 05/05/2014 08:40 65 390 354.4
9 05/05/2014 08:50 64 390.1 354.5
10 05/05/2014 09:00 64 390.1 354.5
11 05/05/2014 09:10 62 390.1 354.7
12 05/05/2014 09:20 62 390.2 354.8
13 05/05/2014 09:30 64 390.4 354.8
14 05/05/2014 09:40 66 390.5 354.8
15 05/05/2014 09:50 68 390.7 354.8
16 05/05/2014 10:00 71 390.9 354.8
17 05/05/2014 10:10 72 391 354.8
18 05/05/2014 10:20 72 391 354.9
19 05/05/2014 10:30 74 391.2 354.9
20 05/05/2014 10:40 77 391.4 354.9
如果满足上述条件,则进行计算。到目前为止,我已尝试使用' for循环'去做这个。然而,它是非常无效的,我没有得到所有可能的输出。这就是我现在的代码:
for(i in 2:nrow(df)) {
h <- i-1
j <- i+1
rowh <- df[h,]
rowi <- df[i,]
rowj <- df[j,]
## all the conditions
if (!is.na(rowh$batteryAvailable) &
!is.na(rowi$batteryAvailable) &
!is.na(rowj$batteryAvailable) &
rowh$batteryAvailable == rowj$batteryAvailable &
rowh$batteryAvailable != rowi$batteryAvailable &
abs(rowh$batteryAvailable - rowi$batteryAvailable) > 5 &
difftime(rowj$date, rowh$date, units = "hours") < 24) {
## the calculation
Charge_h <- (rowi$solarChargeTotal-rowh$solarChargeTotal)
V2G_h <- (rowi$V2GTotal-rowh$V2GTotal)
Charge_j <- (rowj$solarChargeTotal-rowi$solarChargeTotal)
V2G_j <- (rowj$V2GTotal-rowi$V2GTotal)
if (!exists("bat_efficiency")){
bat_efficiency <- data.frame()
}
## storage of found values
if (exists("bat_efficiency")){
rowj$Charge <- Charge_h + Charge_j
rowj$V2G <- V2G_h + V2G_j
bat_efficiency <-rbind(bat_efficiency, rowj)
}
}
}
外行和中行之间差异至少为5的条件导致没有找到的点。这很奇怪,因为我知道他们在那里。将这种情况排除在外只能得到电池差异为1或2的观察结果。
基本上我想要的是一种使用3个变量(例如h,i,j)的概念的方法,这些变量在行中移动以比较最大值的时间跨度内的值。 1天,不使用for循环。也许有人知道=>的条件会发生什么? 5,我没有收到错误信息,没有输出。
注意:有一天可能会有不止一次满足要求,我对所有这些要求感兴趣。并不是它在第一个找到的值之后停止。