我有一个数据帧,看起来像这样:变量是长度为0,无NA的
logentrytime ord_lat_dt0 ord_lat_dt1 ord_lat_dt2 ord_lat_dt3 ord_lat_dt4 ord_lat_dt5 ord_lat_dt6 ord_lat_dt7 ord_lat_dt8 ord_lat_dt9 ord_num0 ord_num1 ord_num2
1 2016-11-10 14:23:36 0 0 0 0 0 0 2016-02-12 0 0 0 0 0 0
2 2016-11-10 14:22:22 0 0 0 0 0 0 2016-02-12 0 0 0 0 0 0
3 2016-11-07 16:02:45 0 0 0 0 0 0 2016-02-12 0 0 0 0 0 0
4 2016-11-07 21:10:00 0 0 0 0 0 0 2016-02-12 0 0 0 0 0 0
5 2016-11-07 16:03:29 0 0 0 0 0 0 2016-02-12 0 0 0 0 0 0
6 2016-11-10 14:23:05 0 0 0 0 0 0 2016-02-12 0 0 0 0 0 0
凡ord_lat_dt列是客户的最后一次购买日期。 ord_lat_dt [0-9]是从不同的数据库表中提取的。因此,每行表示一个客户,他们的最后订单日期将在9列中的一列中指示。
我想合并这些,但在此之前,我想根据每列中的日期计算“months_since_last_purchase”。
因此,我已转换的日期列成字符串,和我通过使用这些功能的循环:
elapsed_time <- function(end_date, start_date) {
ed <- as.POSIXlt(end_date)
sd <- as.POSIXlt(start_date)
12 * (ed$year - sd$year) + (ed$mon - sd$mon)
}
convert_time <- function(data, column){
for(i in seq(1,length(data$column))){
if((data$column[i]!= "0") ==TRUE){
data$column[i] <- elapsed_months(Sys.time(), as.Date(data$column[i], format="%Y/%m/%d"))
}
}
return(data)
}
test1 <- convert_time(test2, ord_lat_dt0)
但我得到错误
Error in if ((data$column[i] != "0") == TRUE) { :
argument is of length zero
我也试图改变如果声明检查:
grepl("[-]", data$column[i])==FALSE)
但我得到同样的错误。
任何想法?
如果您决定投票,请向我解释我的问题出了什么问题。我正在努力学习,并希望确保我正确地问。
注:我有一个不同的问题,并完全改变了这个问题。因此下面的一些评论不适用。由于反对票,我无法提出新的问题。
你想用'date-time'来代替''吗? “0”本身不是“日期时间”。 –
aichao
我不想用日期时间对象替换它,这是一个要求吗?这是客户交易数据,我基本上只是想要一个表示特定客户的标志对此列没有价值。 – CAK
这就是NA的意思,你认为这个标志是什么? – denrou