我需要在名为'test'的数据框中创建一个名为'night'的新列。我有很多1000行测量与多个晚上的录音时间相关联。一列有日期,另一列有录音时间。由于录制是一夜之间,因此每晚录制有两个日期 - 午夜之前(date1)和之后(date2)。我的目标是一个新列,其中一个日期派生自date1。我想避免IF ELSE方法,因为它需要太长时间 - SUBSET似乎很快。我在下面几乎成功了,但是当我RBIND生成一个新的向量时,我丢失了与数据帧'test'的原始行号关联。因此,在'test2'中,当我在'night'上交叉引用值时,它们与正确的'日期'不匹配,因为RBIND丢弃原始行号并且不交错子集。谢谢你的麻烦。
数据帧= “测试”
measure1 measure2 date time <desired new col=night>
1 2.3 4.5 2013-12-01 1800.00 2013-12-01
2 2.2 4.4 2013-12-01 2353.45 2013-12-01
3 2.1 4.2 2013-12-02 0315.56 2013-12-01
4 2.6 4.4 2013-12-02 1903.23 2013-12-02
5 2.2 4.7 2013-12-03 0553.12 2013-12-02
etc
AA<-test[test$date=="2013-12-01", ]
WW <- subset(AA, time>180000 & time<235959, select=date)
BB<-test[test$date=="2013-12-02", ]
XX <- subset(BB, time>=0 & time<070000, select=date)
ZZ1 <- replace(XX, "2013-12-02", "2013-12-01")
#or else
KK1 <-rbind(WW, XX)
AA<-test[test$date=="2013-12-02", ]
WW <- subset(AA, time>180000 & time<235959, select=date)
BB<-test[test$date=="2013-12-03", ]
XX <- subset(BB, time>=0 & time<070000, select=date)
ZZ2 <- replace(XX, "2013-12-03", "2013-12-02")
#or else
KK2 <-rbind(WW, XX)
...
#repeated for each date of interest
FF<- rbind(KK1, KK2, ...)
#or else
FF<- rbind(ZZ1, ZZ2, ...)
colnames(FF) <-'night'
test2 <- data.frame(cbind(test, FF))
答案 0 :(得分:1)
如果我理解正确...早上07点之前(即时间<700,格式化你的话),从当前日期减去1:
test$date <- as.Date(test$date)
test$night <- test$date - 1 * (test$time < 700)
test
# measure1 measure2 date time night
# 1 2.3 4.5 2013-12-01 1800.00 2013-12-01
# 2 2.2 4.4 2013-12-01 2353.45 2013-12-01
# 3 2.1 4.2 2013-12-02 315.56 2013-12-01
# 4 2.6 4.4 2013-12-02 1903.23 2013-12-02
# 5 2.2 4.7 2013-12-03 553.12 2013-12-02