2014-03-01 31 views
2

我可以使用循环来回答这个问题,我想不用(最好在dplyr或plyr中)。在R中没有循环的绑定

我有一个数据帧和国家的名单

Data <- data.frame(
    Date = c(2012:2014,2014,2013:2014), 
    Value = rnorm(6), 
) 

Countries <- c("AUS","USA","UK") 

数据帧看起来像这样

Date  Value 
1 2012 0.20200445 
2 2013 1.75576426 
3 2014 -0.67385232 
4 2014 2.36476344 
5 2013 -2.00068346 
6 2014 -0.01290928 

我需要在国家列表分配给数据。应用该规则 - 将保持在同一个国家,直到数据帧相邻的两个日期之间的差值是< = 0的成品应该是这样的

Date  Value Countries 
1 2012 0.64706706  AUS 
2 2013 0.26878534  AUS 
3 2014 -0.07091867  AUS 
4 2014 0.49546373  USA 
5 2013 -0.18158935  UK 
6 2014 -0.43114076  UK 

回答

4

没有必要在这里使用dplyr

Data$Countries <- Countries[c(1, cumsum(diff(Data$Date) <= 0) + 1)]