我正在尝试创建一列,显示一列(fishing_effort_start_date_time)的值(即时间)何时大于(即稍后的时间)另一列(POSITION_DATETIME_NZ)的值。我正在使用以下脚本:
travel_pot <- gpr_df_R %>%
rowwise() %>%
group_by(vessel_name) %>%
droplevels() %>%
mutate(trip_pot=case_when(fishing_effort_start_date_time > POSITION_DATETIME_NZ
~"travel", T~"potting"))
travel_pot
它创建了列,但 Travel_pot 列中的结果不正确,例如:
。
我做错了什么?
您尚未提供代表,但正如您所建议的,这可能是因为您的日期时间列的格式不正确。这是一个有效的示例,请检查我的
ifelse()
值是否正确,如果错误请发表评论。如果您的日期时间列的格式不正确,您可以运行如下命令:
gpr_df_R$POSITION_DATETIME_NZ <- as.POSIXct(gpr_df_R$POSITION_DATETIME_NZ,
format = "%d/%m/%Y %H:%M:%S",
tz = "nz")
然后对所有日期时间列重复此操作。这是一个代表。根据您的示例数据,您不需要
group_by()
或 rowwise()
:
library(dplyr)
# Sample data
from1 <- as.POSIXct("01/10/2019 08:50:00",
format = "%d/%m/%Y %H:%M:%S",
tz = "nz")
to1 <- as.POSIXct("01/10/2019 10:30:00",
format = "%d/%m/%Y %H:%M:%S",
tz = "nz")
fesdt <- as.POSIXct("01/10/2019 08:40:00",
format = "%d/%m/%Y %H:%M:%S",
tz = "nz")
feedt <- as.POSIXct("01/10/2019 14:17:00",
format = "%d/%m/%Y %H:%M:%S",
tz = "nz")
gpr_df_R <- data.frame(POSITION_DATETIME_NZ = seq(from = from1,
by = 600,
to = to1),
fishing_effort_start_date_time = fesdt,
fishing_effort_end_date_time = fesdt)
# Create new column
travel_pot <- gpr_df_R %>%
mutate(trip_pot = ifelse(fishing_effort_start_date_time > POSITION_DATETIME_NZ,
"potting", "travel"))
travel_pot
POSITION_DATETIME_NZ fishing_effort_start_date_time fishing_effort_end_date_time trip_pot
1 2019-10-01 08:50:00 2019-10-01 08:40:00 2019-10-01 08:40:00 travel
2 2019-10-01 09:00:00 2019-10-01 08:40:00 2019-10-01 08:40:00 travel
3 2019-10-01 09:10:00 2019-10-01 08:40:00 2019-10-01 08:40:00 travel
4 2019-10-01 09:20:00 2019-10-01 08:40:00 2019-10-01 08:40:00 travel
5 2019-10-01 09:30:00 2019-10-01 08:40:00 2019-10-01 08:40:00 travel
6 2019-10-01 09:40:00 2019-10-01 08:40:00 2019-10-01 08:40:00 travel
7 2019-10-01 09:50:00 2019-10-01 08:40:00 2019-10-01 08:40:00 travel
8 2019-10-01 10:00:00 2019-10-01 08:40:00 2019-10-01 08:40:00 travel
9 2019-10-01 10:10:00 2019-10-01 08:40:00 2019-10-01 08:40:00 travel
10 2019-10-01 10:20:00 2019-10-01 08:40:00 2019-10-01 08:40:00 travel
11 2019-10-01 10:30:00 2019-10-01 08:40:00 2019-10-01 08:40:00 travel