r - data.table 合并时列错误

标签 r data.table

假设我有这两个表:

library(data.table)

x <- data.table(Date = as.Date(c("1990-01-29", "1990-02-30",
                                 "1990-01-31", "1990-02-01",
                                 "1990-02-02", "1990-02-05",
                                 "1990-02-06", "1990-02-07",
                                 "1990-02-08", "1990-02-09")),
                a = c(1, 1, 2, 3, 5, 8, 13, 21, 34, 55))

y <- data.table(Date1 = as.Date(c("1990-01-31", "1990-02-06", "1990-02-07")),
                Date2 = as.Date(c("1990-02-06", "1990-02-07", "1990-02-09")),
                b = c(5, 2, 4))

Table y 实际上是从 Date1 开始到 Date2 结束的不同“周期”的描述符(例如一行的 Date2 是下一行的Date1),带有该时期的(非唯一)描述符。

我现在想合并这些表,这样对于 x 的每个日期都有 a 和相应的 y$b (应删除该期间之外的日期)。我尝试了以下方法,但不正确:

x[y, on = .(Date > Date1, Date <= Date2)]
#          Date  x     Date.1 y
# 1: 1990-01-31  3 1990-02-06 5
# 2: 1990-01-31  5 1990-02-06 5
# 3: 1990-01-31  8 1990-02-06 5
# 4: 1990-01-31 13 1990-02-06 5
# 5: 1990-02-06 21 1990-02-07 2
# 6: 1990-02-07 34 1990-02-09 4
# 7: 1990-02-07 55 1990-02-09 4

具体来说,Date 列不是 x$Date,而是实际上 y$Date1,根据需要重复,而 >Date.1 列是 Date2

同时,预期输出为

#          Date  x y
# 1: 1990-02-01  3 5
# 2: 1990-02-02  5 5
# 3: 1990-02-05  8 5
# 4: 1990-01-06 13 5
# 5: 1990-02-07 21 2
# 6: 1990-02-08 34 4
# 7: 1990-02-09 55 4

最佳答案

创建重复列可能会更好

x[,.(Daten = Date, Date, a)][y,
      on = .(Date > Date1, Date <= Date2)][, .(Date = Daten, a, b)]
#         Date  a b
#1: 1990-02-01  3 5
#2: 1990-02-02  5 5
#3: 1990-02-05  8 5
#4: 1990-02-06 13 5
#5: 1990-02-07 21 2
#6: 1990-02-08 34 4
#7: 1990-02-09 55 4

关于r - data.table 合并时列错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58530254/

相关文章:

R从数据框中选择单个数据点

r - data.table 中的 `by` 和 `.EACHI`

r - 对于除当前级别之外的所有级别的每个级别的因子聚合值

r - 从 tidymodels 绘制决策树结果

r - 对列的子集 (.SDcols) 应用函数,同时对另一列(组内)应用不同的函数

r - 基于分隔符将快速 data.table 列拆分为多行

按名称返回所有因子级别作为来自三列数据的新列。表 [R]

r - glmnet:提取标准化系数

r - R中的高效循环逻辑回归

r - 按 R 中的列组长度对数据帧进行排序