4

我有以下数据框

> 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给行?数据帧中的间隔不重叠。elostartstopcoaches

4

1 回答 1

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
于 2012-06-17T20:34:17.763 回答