我需要一些帮助。我目前正在尝试将线性模型与小时电价相匹配。所以,我想创建一个假人,如果一天中的小时是在06:00到20:00之间,则取值为1。不幸的是,到目前为止我一直在努力。
time.cet <- as.POSIXct(time.numeric, origin = "1970-01-01", tz=local.time.zone)
hours.S <- strftime(time.cet, format = "%H:%M:%S", tz=local.time.zone)
head(time.cet)
[1] "2007-01-01 00:00:00 CET" "2007-01-01 01:00:00 CET" "2007-01-01 02:00:00 CET"
[4] "2007-01-01 03:00:00 CET" "2007-01-01 04:00:00 CET" "2007-01-01 05:00:00 CET"
我希望有人可以提供帮助。
答案 0 :(得分:2)
当我做截止时间时,我喜欢将截止值作为对象。这样,如果您需要更改截止值,则更改对象的值而不是条件语句中的值会更容易。
我的代码使用了lubridate(),这是一个管理时间/日期的好方法。
下面的代码应该为您提供将虚拟变量合并到分析中所需的信息。
add_action( 'woocommerce_cart_calculate_fees','woocommerce_custom_surcharge', 10, 1 );
function woocommerce_custom_surcharge( $cart_object ) {
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;
## ---- CALCULATION ---- ##
global $wpdb;
foreach( $cart_object->get_cart() as $values ){
$tax_hotel = $wpdb->get_row( "SELECT * FROM tax_hotel_and_name WHERE hotel_id= '".$values['st_booking_data']['room_id']."'" );
$sum[] = ($tax_hotel->tax_percentage / 100) * $values['st_booking_data']['total_price'];
}
$fee = array_sum($sum);
## ---- APPLYING CALCULATED FEE ---- ##
if($fee > 0)
$cart_object->add_fee( __('Processing Fee'), $fee, false );
}
答案 1 :(得分:1)
ifelse()
语句是创建虚拟变量的便捷方式。我个人对时间的了解并不多,但创建虚拟变量的形式类似于:
dummy <- with(data, ifelse(time > 06:00 & time < 20:00, 1, 0)
数据是你的数据被调用的地方,时间是存储时间的列。如果时间不像普通的数字向量那样,你可能需要稍微调整一下条件(我假设为了这个目的,他们会)。
答案 2 :(得分:1)
library(lubridate)
# Create fake data
set.seed(2)
dat = data.frame(time = seq(ymd_hms("2016-01-01 00:00:00"), ymd_hms("2016-01-31 00:00:00"), by="hour"))
dat$price = 1 + cumsum(rnorm(nrow(dat), 0, 0.01))
# Create time dummy
dat$dummy = ifelse(hour(dat$time) >=6 & hour(dat$time) <= 20, 1, 0)
答案 3 :(得分:1)
尝试下次包含可重现的代码。您似乎错过了time.numeric
。
好的,我不得不随意补课。
time.cet <- c( ymd_hms( "2007-01-01 00:00:00" ),
ymd_hms( "2007-01-01 06:00:00" ),
ymd_hms( "2007-01-01 12:00:00" ) )
time.cet
[1] "2006-12-31 18:00:00 CST" "2007-01-01 00:00:00 CST" "2007-01-01 06:00:00 CST"
请注意时区问题,这对解决方案而言并不重要。
您可以使用dplyr::between
和lubridate::hour
获取TRUE / FALSE(或1/0)列表,以确定X
时间是否在A & B
之间。
library(dplyr)
library(lubridate)
A <- 6
B <- 20
between( hour(time.cet), A, B )
[1] TRUE FALSE TRUE
请注意,between
包含>=
&amp; <=