我有一個數據幀,看起來像這樣:變量是長度爲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