根据一列值是否大于另一列创建新列

问题描述 投票:0回答:1

我正在尝试创建一列,显示一列(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 列中的结果不正确,例如:

我做错了什么?

dplyr case mutate
1个回答
0
投票

您尚未提供代表,但正如您所建议的,这可能是因为您的日期时间列的格式不正确。这是一个有效的示例,请检查我的

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
© www.soinside.com 2019 - 2024. All rights reserved.