我正在尝试使用ifelse
条件在我的数据框架中创建一个新列:
假设有两个数据帧A和B,它们都有日期和时间列。
如果A中的日期与B中的日期匹配且A的时间中的日期等于B的时间中的匹配日期或B的时间中的匹配日期低于A中的下一行的时间,则为TRUE,否则为FALSE。
我希望这很清楚..到目前为止,我已经尝试了类似的东西
A %>% mutate(DFT = ifelse(Dayt == B$date & Tyme == B$time |
Tyme > Time[which(Dayt == B$date & Tyme ==B$time) +1],
B[which(which(Dayt == B$date & Tyme ==B$time) +1])], NA))
这段代码可能不起作用,但我希望它能让我知道我想要实现的目标。任何帮助,将不胜感激。
答案 0 :(得分:1)
set.seed(1)
A = data.frame(
date=seq(as.Date("2017/1/1"), as.Date("2017/1/10"), "days"))
B = data.frame(date=seq(as.Date("2017/1/2"), as.Date("2017/1/9"), "days"))
A$time <- sample(1:3,length(A$date),TRUE)
B$time <- sample(1:3,length(B$date),TRUE)
A
date time
1: 2017-01-01 1
2: 2017-01-02 2
3: 2017-01-03 2
4: 2017-01-04 3
5: 2017-01-05 1
6: 2017-01-06 3
7: 2017-01-07 3
8: 2017-01-08 2
9: 2017-01-09 2
10: 2017-01-10 1
B
date time
1: 2017-01-02 1
2: 2017-01-03 1
3: 2017-01-04 3
4: 2017-01-05 2
5: 2017-01-06 3
6: 2017-01-07 2
7: 2017-01-08 3
8: 2017-01-09 3
这是一个解决方案,首先我按日期合并然后使用时间条件进行过滤。
library(data.table)
setDT(A)
setDT(B)
merge(A,B,by="date")[time.x==time.y | time.y==c(tail(time.x,-1),NA)]
date time.x time.y
1: 2017-01-04 3 3
2: 2017-01-06 3 3
3: 2017-01-07 3 2