从具有原始数据帧行关联的子集创建新列

时间:2014-01-03 13:43:11

标签: r

我需要在名为'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))

1 个答案:

答案 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