我有以下数据框
> head(elo)
date elo
1 1921-12-18 1597
2 1922-05-14 1583
3 1922-05-28 1595
4 1922-09-03 1595
5 1922-10-01 1612
6 1923-06-03 1597
[...]
> head(coaches)
surname start stop
Smith 1921-12-18 1922-05-28
White 1922-06-01 1923-06-28
Black 1923-09-13 1928-01-01
输出应如下所示:
date elo coach
1 1921-12-18 1597 Smith
2 1922-05-14 1583 Smith
3 1922-05-28 1595 Smith
4 1922-09-03 1595 White
5 1922-10-01 1612 White
6 1923-06-03 1597 White
[...]
如何根据coaches$surname
和elo
列将start
分配给stop
行? coaches
数据框中的间隔不重叠。
答案 0 :(得分:4)
lst <- lapply(1:nrow(coaches),function(x)
elo[which(elo$date >= coaches$start[x] & elo$date <= coaches$stop[x]),])
cbind(as.data.frame(do.call(rbind, lst)),
coach = rep(coaches$surname, sapply(lst, function(x) nrow(x))))
date elo coach
1 1921-12-18 1597 Smith
2 1922-05-14 1583 Smith
3 1922-05-28 1595 Smith
4 1922-09-03 1595 White
5 1922-10-01 1612 White
6 1923-06-03 1597 White