我有一个包含四列的数据帧: Time、ID、Serial、Reading。
序列号是指我在研究中使用的仪器的实际序列号。每个唯一的序列号对应一个物理气象站。因此,我根据"Serial“中的数字创建第五列。
到目前为止,这个方法运行得很好:
weather[substr(weather$Serial,1,6)=="600655", "Station"]<- Station 1
然而,有时我们的仪器会在不同的站点之间交换。因此,我希望能够根据序列号和时间来填充Station列,例如,如果序列号匹配"600655“并且在8月之后,那么它将是Station 2。但是,如果它在8月之前,它将是Station 1。" Time”的格式是"YYYY-MM-DD HH:MM:SS“。
这个是可能的吗?或者,有没有更简单的方法来做这件事?我有大约50个气象站,为每个气象站做这件事是相当累人的。
发布于 2021-06-08 11:28:33
考虑使用站点名称、编号和更改日期创建一个单独的站点数据帧,然后按时间逻辑merge
到天气数据帧和subset
。
# NEW DATA FRAME OF ALL WEATHER STATIONS
stations <- data.frame(
Station = c("Station 1", "Station 2", ...),
Station_Number = c("600655", "600655", ...),
Change_Date = as.POSIXCT("2020-07-31", "9999-12-31", ...)
)
# ADD NEW COLUMN FOR MERGING
weather$Station_Number <- substr(weather$Serial,1,6)
# MERGE AND SUBSET
final_df <- transform(
subset(
merge(weather, stations, by="Station_Number"),
Time <= Change_Date
),
Change_Date=NULL, Station_Number=NULL
) # REMOVE HELPER COLUMNS
# MERGE AND SUBSET WITH BASE R PIPES (R 4.1+)
final_df <- merge(weather, stations, by="Station_Number") |>
subset(Time <= Change_Date) |>
transform(Change_Date=NULL, Station_Number=NULL)
https://stackoverflow.com/questions/67880802
复制相似问题