3

我想从这个开始:

  years
 -------
  1994
  2001
   .
   .

对此:

int dates
 ------
  8793    # 1994-01-28
  8824    # 1994-02-28
  8852    # 1994-03-28
  8883    # 1994-04-28
  8913    # 1994-05-28
  8944    # 1994-06-28
  8974    # 1994-07-28
  9005    # 1994-08-28
  9036    # 1994-09-28
  9066    # 1994-10-28
  9097    # 1994-11-28
  9127    # 1994-12-28
 11350    # 2001-01-28
 11381    # 2001-02-28
 11409    # 2001-03-28
 11440    # 2001-04-28
 11470    # 2001-05-28
 11501    # 2001-06-28
 11531    # 2001-07-28
 11562    # 2001-08-28
 11593    # 2001-09-28
 11623    # 2001-10-28
 11654    # 2001-11-28
 11684    # 2001-12-28
   .
   .

即将每年分为 12 个日期(该年的每个月的第 28 个)作为 1970 年基整数。

这样做最有效的方法是什么?

我的尝试非常缓慢!

require(data.table)

# Sample data
dt <- data.table(year=c(1994,2001)) # edit

# Create results table
data <- data.table(dates=integer())

for (i in 1:12) {
    temp <- dt
    temp$dates <- as.integer(as.Date(paste(temp$year, "-", sprintf( "%02d",i),"-28", sep="")))
    temp <- subset(temp, select=dates)
    data <- rbind(temp,data)
}

# Sort
data <- data[with(data, order(dates)),]
4

3 回答 3

2

尝试这个。输入输出都是数据表:

# input data
Y <- data.table(year = c(1994, 2001))
M <- data.table(month = 1:12)

as.data.table( merge.data.frame( M, Y ))[, 
   list(`int dates` = as.numeric(as.Date(ISOdate(year, month, 28))))
]
于 2013-02-01T15:30:50.357 回答
2

这是一个单行:

as.integer(as.Date(apply(expand.grid(1:12,c(1994,2001)), 1, 
                         function(x)paste(x[2], x[1], 28,sep="-"))))

 [1]  8793  8824  8852  8883  8913  8944  8974  9005  9036  9066  9097  9127 11350 11381 11409 11440 11470 11501
[19] 11531 11562 11593 11623 11654 11684

这里是一步一步的解释:

expand.grid(1:12, c(1994,2001))
 Var1 Var2
1     1 1994
2     2 1994
3     3 1994
4     4 1994
5     5 1994
6     6 1994
7     7 1994
8     8 1994
9     9 1994
10   10 1994
11   11 1994
12   12 1994
13    1 2001
14    2 2001
15    3 2001
16    4 2001
17    5 2001
18    6 2001
19    7 2001
20    8 2001
21    9 2001
22   10 2001
23   11 2001
24   12 2001

到你apply对每一行的功能paste()。然后转换为 Date 对象,然后将其转换为整数(默认为 1970-base)。

于 2013-02-01T14:07:03.193 回答
-1

如果您打算将此数据移回 excel,然后将“25569”添加到 excel 中的数字,您将获得日期。这是 R 的一个问题,我使用该数字将日期恢复为 excel 正确格式。

于 2013-02-01T14:33:01.297 回答