我想将向量中的日期添加到现有数据表中。向量中的每个日期应输入不同的列中。我正在尝试对包含任意数量日期的向量执行此操作-因此基本上我想要长度为n的向量的通用代码。我通过以下方式执行此操作:
someDates <- c(as.Date('2019-1-31'), as.Date('2019-3-30'))
newColumns <- paste0('col', 1:length(someDates))
date_column <- c(as.Date('2018-12-31'), as.Date('2018-11-30'), as.Date('2017-09-30'), as.Date('2016-01-30'))
some_column <- letters[1:4]
DT <- data.table(date_column, some_column)
DT[, (newColumns) := as.data.table(matrix(rep(someDates, each = nrow(DT)), nr = nrow(DT)))]
DT[, (newColumns) := lapply(.SD, as.Date), .SDcols = newColumns]
我在第一步中没有发现函数matrix
的使用,但最后一步非常漂亮-我也不喜欢后来必须转换为日期的事实。我可以更优雅的方式获得相同的结果吗?
答案 0 :(得分:3)
您可以使用as.list
library(data.table)
DT[, (newColumns) := as.list(someDates)]
DT
# date_column some_column col1 col2
#1: 2018-12-31 a 2019-01-31 2019-03-30
#2: 2018-11-30 b 2019-01-31 2019-03-30
#3: 2017-09-30 c 2019-01-31 2019-03-30
#4: 2016-01-30 d 2019-01-31 2019-03-30
检查str(DT)
,以确保新列属于Date
类。
str(DT)
#Classes ‘data.table’ and 'data.frame': 4 obs. of 4 variables:
# $ date_column: Date, format: "2018-12-31" "2018-11-30" "2017-09-30" "2016-01-30"
# $ some_column: chr "a" "b" "c" "d"
# $ col1 : Date, format: "2019-01-31" "2019-01-31" "2019-01-31" "2019-01-31"
# $ col2 : Date, format: "2019-03-30" "2019-03-30" "2019-03-30" "2019-03-30"
# - attr(*, ".internal.selfref")=<externalptr>