【发布时间】:2021-04-14 16:31:21
【问题描述】:
来自如下所示的 csv 文件:
| Date | Timestamp | Units | Name | Condition | Obj | Param | Attrib1 | Atrrib2 | Result |
|---|---|---|---|---|---|---|---|---|---|
| 2019-07-31 | 2019-08-01 01:16:09 | m3 | n01 | a1 | o1 | Nap | TP | IN | 34937 |
| 2019-07-31 | 2019-08-01 01:16:10 | m3 | n01 | a2 | o2 | Nap | TP | OUT | 36673.09 |
| 2019-11-06 | 2019-11-18 20:21:06 | mg/l | n01 | a3 | o3 | NO3 | TP | OUT | 1 |
| 2019-11-06 | 2019-11-18 20:21:06 | mg/l | n01 | z5 | o4 | BOD | IO | IN | 220 |
| 2019-11-06 | 2019-11-18 20:21:06 | mg/l | n01 | z5 | o4 | BOD | TP | IN | 220 |
| 2019-11-06 | 2019-11-18 20:21:06 | mg/l | n01 | z6 | o1 | NO2 | TP | OUT | 0.31 |
| 2019-11-06 | 2019-11-18 20:21:13 | mg/l | n01 | a11 | o4 | Ntot | IO | IN | 47 |
| 2019-11-06 | 2019-11-18 20:21:13 | mg/l | n01 | a11 | o4 | Ntot | TP | IN | 47 |
| 2021-01-06 | 2021-01-07 02:15:06 | m3 | n01 | a1 | o1 | Nap | TP | IN | 17909 |
| 2021-01-06 | 2021-01-07 02:15:07 | m3 | n01 | a2 | o2 | Nap | TP | OUT | 19216.19 |
我想删除 Date 列和 Condition 列中每个值的最后一个(或最大)Timestamp 行。
结果表不应有重复的时间戳“2019-11-18 20:21:06”和“2019-11-18 20:21:13”(Condition和Result 值分别为 [z5, a11] 和 [220, 47])。
| Date | Timestamp | Units | Name | Condition | Obj | Param | Attrib1 | Atrrib2 | Result |
|---|---|---|---|---|---|---|---|---|---|
| 2019-07-31 | 2019-08-01 01:16:09 | m3 | n01 | a1 | o1 | Nap | TP | IN | 34937 |
| 2019-07-31 | 2019-08-01 01:16:10 | m3 | n01 | a2 | o2 | Nap | TP | OUT | 36673.09 |
| 2019-11-06 | 2019-11-18 20:21:06 | mg/l | n01 | a3 | o3 | NO3 | TP | OUT | 1 |
| 2019-11-06 | 2019-11-18 20:21:06 | mg/l | n01 | z5 | o4 | BOD | IO | IN | 220 |
| 2019-11-06 | 2019-11-18 20:21:06 | mg/l | n01 | z6 | o1 | NO2 | TP | OUT | 0.31 |
| 2019-11-06 | 2019-11-18 20:21:13 | mg/l | n01 | a11 | o4 | Ntot | IO | IN | 47 |
| 2021-01-06 | 2021-01-07 02:15:06 | m3 | n01 | a1 | o1 | Nap | TP | IN | 17909 |
| 2021-01-06 | 2021-01-07 02:15:07 | m3 | n01 | a2 | o2 | Nap | TP | OUT | 19216.19 |
library(tidyverse)
# Group per Date and Condition and filter max Timestamp
df <- read.csv("./Example.csv") %>%
mutate(Date = as.POSIXct(Date, format = "%Y-%m-%d")) %>%
mutate(Timestamp = as.POSIXct(Timestamp, format = "%Y-%m-%d %H:%M:%S")) %>%
group_by(Date, Condition) %>%
filter(Timestamp == max(Timestamp)) %>%
distinct()
write_csv(df, file = "./ExampleResult.csv")
但我无法得到想要的结果。
这种方法有什么问题?还有其他更简单的方法吗?
谢谢!
【问题讨论】:
-
请使用
dput显示示例数据而不是图像 -
如果您不想重复行,请使用
slice_max(Timestamp, n = 1)而不是filter -
谢谢 Dan Adams 和 Ronak Shah,这两个答案都能起到作用。我喜欢 Dan 建议的方法,因为在需要额外条件的其他情况下,它可能更加通用。
-
@eliasmaxil - 很高兴它有帮助。请随意accept one of the answers,这是最有帮助的