在我自己的项目上工作时,我有一个较小的数据框,只包含2个从较大数据框子集化的列。
我正在处理的2列是“Lap ..”和“Timestamp..s。”。
我希望从特定的圈数获得最小时间戳和最大时间戳。
现在我的重点是具有特定圈数的硬编码值。
这是我的代码:
time_df <- csv_to_Table[c("Lap..", "Timestamp..s." )]
#output data to csv to make sure that it is correct
write.csv(time_df, file = "data/lap_timestamp.csv")
output$time_test <- renderText({
max(time_df$Timestamp..s.) - min(time_df$Timestamp..s.)
})
上面的代码会显示我在赛道上开的总时间。
但是,当我阅读max和min文档时,它没有提到有额外的标准来过滤。看到dplyr库确实包含一个过滤器,我尝试了一下,但仍然没有运气。
output$time_test <- renderText({
(max(time_df$Timestamp..s.) %>% filter(time_df$Lap.. == 1)) - (min(time_df$Timestamp..s.) %>% filter(time_df$Lap.. == 1))
})
测试数据位于:https://pastebin.com/GZvWEcXb
将来我会想要获得一个下拉数字。
感谢任何帮助/提示。
答案 0 :(得分:0)
您也可以使用aggregate()
。如果我理解您的数据,您的数据如下所示:
# Make up some data
set.seed(1)
df = data.frame(Lap = sample(1:10, size = 20, replace = TRUE),
Timestamp = sample(seq.POSIXt(from = ISOdate(2017,1,1), to = ISOdate(2017,06,1), by = "day"), size = 20, replace = TRUE))
然后使用aggregate()
获取每个圈数的最小值或最大值:
aggregate(Timestamp ~ Lap, data = df, FUN = min)
aggregate(Timestamp ~ Lap, data = df, FUN = max)
输出:
> aggregate(Timestamp ~ Lap, data = df, FUN = min)
Lap Timestamp
1 1 2017-02-21 13:00:00
2 2 2017-04-02 14:00:00
3 3 2017-02-10 13:00:00
4 4 2017-01-29 13:00:00
5 5 2017-04-12 14:00:00
6 6 2017-04-10 14:00:00
7 7 2017-02-28 13:00:00
8 8 2017-03-04 13:00:00
9 9 2017-02-28 13:00:00
10 10 2017-01-03 13:00:00
> aggregate(Timestamp ~ Lap, data = df, FUN = max)
Lap Timestamp
1 1 2017-02-21 13:00:00
2 2 2017-04-02 14:00:00
3 3 2017-05-23 14:00:00
4 4 2017-04-21 14:00:00
5 5 2017-04-12 14:00:00
6 6 2017-04-10 14:00:00
7 7 2017-05-13 14:00:00
8 8 2017-05-06 14:00:00
9 9 2017-02-28 13:00:00
10 10 2017-01-20 13:00:00