我正在創建一個函數,但我需要一些最佳實踐方面的幫助。執行測試,從同一行的另一列獲取結果
Active.Test <- function(date) {
date <- rep(date,length(df$Start.Date))
active <- rep(0,length(df$Start.Date))
active[date > df$Start.Date & date < df$End.Date] <- 1
active[df$Start.Date == df$End.Date ] <- df$Active.Time
return (active)
}
我基本上要檢查的日期(這是傳遞給函數)是我的數據幀的開始和結束日期之間。如果是,則分配一個1.如果開始日期和結束日期相等,則從Active.Time列中的同一行獲取結果。其他值的默認值爲0.
這將返回一個錯誤,因爲它將檢索第二個測試的大小不同的向量。
我可以重新編寫上面:
Active.Test <- function(date) {
date <- rep(date,length(df$Start.Date))
active <- rep(0,length(df$Start.Date))
active[date > df$Start.Date & date < df$End.Date] <- 1
active[df$Start.Date == df$End.Date] <- df$Active.Time[df$Start.Date == df$End.Date]
return (active)
}
那麼這將讓來自Active.Time柱正確的元素,但這似乎並沒有被寫這一種優雅的方式。我也猜測這是慢的,因爲我執行同樣的檢查兩次多次。
你能幫我用最佳實踐重新寫這個嗎?
編輯:這裏有一些代碼來獲取幾行數據,然後通過檢查是否開始和結束日期包含25/05/2016來測試使用函數。
#Create a data frame
df <- data.frame(End.Date = as.Date(c("1/05/2016","28/05/2016", "25/05/2016"), format = "%d/%m/%Y"), Start.Date = as.Date(c("20/04/2016 11:00","20/05/2016 23:00", "25/05/2016 10:00"), format = "%d/%m/%Y"), Active.Time = as.numeric(c(0.5,0.4,0.8)))
#Test the function
df$new <- Active.Test(as.Date("25/05/2016", format = "%d/%m/%Y"))
感謝
提供一個最小的數據集,人們可以馬上處理。 – shekeine
感謝您的評論。增加了一些數據。 – user1923975