0
data <- data.frame(dates = c("2014-10-28 00:01:59.526","2014-10-27 13:30:01.526"),
times = c("23:59:59","13:29:55"),
hour = c(23,13),
minute = c(59,29),
second = c(59,55))
data[,1] <- as.POSIXct(data[,1])
data[,2] <- as.factor(data[,2])
class(data[,1])
class(data[,2])
class(data[,3])
class(data[,4])
class(data[,5])
data
dates times hour minute second
1 2014-10-28 00:01:59.526 23:59:59 23 59 59
2 2014-10-27 13:30:01.526 13:29:55 13 29 55
我需要填充新列「NewDate」與信息,但那裏的日期和時間列的組合POSIXct數據IF小時列顯示23那麼「NEwDate」的日期應該是從「日期」列減去1天后的日期,否則應該是「日期」列中的日期。R如果跨數據表的列語句來填充新列
所以最終的輸出應該是:
date time hour minute second NewDate
1 2014-10-28 00:01:59.526 23:59:59 23 59 59 2014-10-27 23:59:59 #NewDate = date-1 + time
2 2014-10-27 13:30:01.526 13:29:55 13 29 55 2014-10-17 13:29:55 #NewDate = date + time
(NewDate必須是一個POSIXct)
什麼是做到不循環下的數據幀,並做類似的最佳途徑:
library(lubridate) #lubridate contains hour(), minute(), second()
CorrectTIME <- function(date, hour, minute, second)
{
NewDate<- vector("numeric",length(date))
for(i in 1:length(date))
{
if(hour[i] > hour(date[i]))
{
NewDate[i] =ISOdatetime(year(date[i]), month(date[i]), day(date[i])-1, hour[i], minute[i], second[i], tz="GMT")
}else
{
NewDate[i] =ISOdatetime(year(date[i]), month(date[i]), day(date[i]), hour[i], minute[i], second[i], tz="GMT")
}
}
}
R有一個函數:'?ifelse' – shadowtalker 2014-11-04 17:56:39
as.factor是多餘的。這已經是一個因素。 – 2014-11-04 21:17:12