我试着按装运期的长短按比例计算。为了实现这一点,我在一个“mutate”函数中创建了一个if结构。执行此操作时,会出现以下错误:
评估错误:未为“日期”对象定义
我曾试图在互联网上搜索答案,但这并没有产生一个帮助我使代码工作的资源。如果你能帮忙的话,我理解。下面是一个可复制的例子。
数据集:
shipments_sample <- structure(list(StartDate = structure(c(18123, 17756, 17833, 17700, 17608, 18083), class = "Date"), EndDate = structure(c(18167, 17802, 17859, 17762, 17674, 18135), class = "Date"), FromRegion = c("Europe", "Europe", "Asia", "Europe", "Asia", "Asia"), ToRegion = c("Europe", "North America", "North America", "Europe", "North America", "Europe"), FreightDays = c(42, 46, 25, 60, 60, 50), DemurrageDays = c(2, 0, 1, 2, 6, 2), Rev_Demurrage = c(15, 0, 7.5, 15, 45, 15), Rev_Freight = c(3120.36990205105, 2770.19243720274, 3263.27948309456, 3256.14131046778, 2688.29554497405, 2913.20508057298), Cost_Transport = c(2133.20515513651, 2245.89817037301, 2485.40039786172, 2357.33319394193, 2163.11768000726, 2269.96431053028), Margin = c(987.164746914546, 524.294266829736, 777.879085232832, 898.808116525851, 525.17786496679, 643.2407700427), Count_Month_Export = structure(c(18109, 17744, 17805, 17683, 17591, 18078), class = "Date"), Count_Month_Import = structure(c(18140, 17775, 17836, 17744, 17652, 18109), class = "Date")), row.names = c(NA, -6L), class = c("tbl_df", "tbl", "data.frame"))
我使用的代码;错误出现在末尾:
shipments_sample %>%
mutate(
# flights %>% filter(between(month, 7, 9))
DaysInMonths = if_else(
(StartDate >= floor_date(proratamonth,"month") & StartDate < ceiling_date(proratamonth,"month")),
as.numeric(ceiling_date(proratamonth,"month") - StartDate),
if_else(
(floor_date(proratamonth,"month") & EndDate < ceiling_date(proratamonth,"month")),
as.numeric(ceiling_date(EndDate,"day") - floor_date(proratamonth,"month")),
if_else(
(StartDate < floor_date(proratamonth,"month") & EndDate >ceiling_date(proratamonth,"month")),
as.numeric(ceiling_date(proratamonth,"month") - floor_date(proratamonth,"month")),
as.numeric(0)
)
)
),
# DaysInMonths = as.numeric(if(StartDate >= proratemonth){ceiling_date(proratemonth,"month") - StartDate}else{42}),
Duration = as.numeric(EndDate - StartDate),
PercentageInMonth = DaysInMonths/as.numeric(EndDate - StartDate),
ProRata_Rev_Freight = Rev_Freight * PercentageInMonth,
ProRata_Rev_Demurrage = PercentageInMonth * Rev_Demurrage,
ProRata_Cost_Transport = PercentageInMonth * Cost_Transport
)