按时间序列操作

时间:2015-12-01 10:39:53

标签: r time series

我有一个时间序列A(ts_A),从1902年到2014年,频率= 12,每个月和某个年份(以及相应的月份)的值为NA

ts_A 

 year gen feb mar ... dec  
 1902 300 525 652     524
 1903 NA  NA  NA  ...  NA
 .... ... ... ... ... ...
 2014 742 135 699 586 458

然而,我有另一个时间序列(ts_B)从1902年到2014年,频率= 1(每年分布)

year value
1902  6524
1903  5682
....  ....
2014  5984

我会在NA中获取数据ts_A,只有在ts_B中存在该年的值时,因为稍后我会用一个比例替换它们。

1 个答案:

答案 0 :(得分:0)

我不清楚(或其他人,显然)你究竟想要什么,但我认为这与此类似:

  1. ts_A中查找包含所有NA的行/年;
  2. ts_B中找到同样为NA;
  3. 的行/年
  4. 仅提取/使用NA中所有ts_A行/年,其中ts_B中的相同行/年不是NA
  5. 如果是这样,那么这样的事情就可以了。

    # make some dummy data
    set.seed(123)
    ts_A <- data.frame(seq(2000,2014),matrix(rpois(180,450),ncol=12))
    colnames(ts_A) <- c("year",month.abb)
    ts_B <- data.frame(year=seq(2000,2014),value=apply(ts_A[,-1],1,sum))
    
    # pretend N years in ts_A have NA for all months
    N <- 3
    knock_out <- sample(ts_A$year,N)
    ts_A[ts_A$year %in% knock_out,-1] <- rep(NA,12)
    # make one of the years in ts_B also NA
    ts_B[ts_B$year %in% knock_out[1],-1] <- NA
    
    # these are the rows/years in ts_A that either have data or a non-NA in ts_B
    ts_C <- ts_A[!(is.na(ts_B$value) & apply(is.na(ts_A[,-1]),1,all)),]