以下是我的示例数据框mydf
,我的数据框的实际长度未知,因为它将针对每个10 seconds
使用新行进行更新。我还创建了空数据框da
,db
,dc
,dd
。
Vin LA LN
A 98 89
B 7 98
C 5 89
D 23 74
A 81 23
A 28 37
B 34 48
现在我需要实现一个逻辑,我应该从数据框mydf
检索数据,并根据mydf$Vin
即IF Vin == A
的值将其推送到相应的数据框,那么LA
和LN
的各个行数据应该被推送到数据帧da
,类似地,IF VIN == B
然后是LA
&的数据。 LN
- > db
。验证Vin
中的值并将数据推送到相应数据帧的脚本应该针对每个11 Seconds
执行。
对于前。如果脚本在Time = Current_Second
执行,则脚本应再次在Time = Current_Second + 11
处重新运行。
答案 0 :(得分:2)
将da,db,dc和dd放在列表中可能更容易。没有必要,但你的for循环变得更清晰。
# sample data
df = read.table(text="Vin LA LN
A 98 89
B 7 98
C 5 89
D 23 74
A 81 23
A 28 37
B 34 48",header=T)
# a list of your dataframes.
your_df = list(A= data.frame(LA= numeric(0), LN= numeric(0)),
B= data.frame(LA= numeric(0), LN= numeric(0)),
C= data.frame(LA= numeric(0), LN= numeric(0)),
D= data.frame(LA= numeric(0), LN= numeric(0))
)
for(i in 1:nrow(df))
{
your_df[[df$Vin[i]]] = rbind(your_df[[df$Vin[i]]], df[i,c("LA","LN")])
Sys.sleep(11) # set this to the desired amount of time between iterations.
print(your_df) # optional to show progress.
}
输出:
$A
LA LN
1 98 89
5 81 23
6 28 37
$B
LA LN
2 7 98
7 34 48
$C
LA LN
3 5 89
$D
LA LN
4 23 74
答案 1 :(得分:2)
您可以使用useProgram
执行以下操作:
Sys.sleep
或者,您可能应该避免执行repeat {
# Your code goes here
cat("Hello, again!\n")
Sys.sleep(11) # Wait 11 seconds
}
# Hello, again!
# Hello, again!
# ...
- 循环或for
,如上所述,并且每隔X秒从外部R执行您的程序。请参阅e.g. this.
答案 2 :(得分:1)
我建议采用以下方法:
# Define interval in seconds
interval <- 11
strt_tme <- Sys.time()
repeat {
if (Sys.time() - strt_tme > interval) {
strt_tme <- Sys.time()
print(paste("Start time:", strt_tme,
"Current time:", Sys.time()))
}
}
与Sys.sleep
相反,如果时间间隔大于所需的秒数,它将在每个场合执行所需的命令。如果您的数据每11秒更新一次,但读取表需要1分钟,您可能愿意执行下一次刷新,在上一次刷新后立即执行,因此对系统时间进行计算可能比使用&#更安全39; Sys.sleep实际上为您提供:operations time + Sys.sleep(11) = your actual interval
。建议的方法反映逻辑:等待至少 11秒(interval)
,如果读取的数据超过该值,则立即重复。我认为最终的选择取决于您想要刷新数据的方式,但现在您有不同的解决方案可供选择。
答案 3 :(得分:-1)
我认为您可以使用proc.time
命令来设置间隔,您可以定义您想要的时间