我正在try 通过三个变量(group、id和date)交叉联接一个data.table.下面的R代码正好完成了我想要做的事情,也就是说,每个组中的每个id都被展开,以包括所有的日期_想要的日期.但是,有没有一种方法可以使用出色的data.table包更有效地完成相同的任务呢?

library(data.table)

data <- data.table(
    group = c(rep("A", 10), rep("B", 10)),
    id    = c(rep("frank", 5), rep("tony", 5), rep("arthur", 5),  rep("edward", 5)),
    date  = seq(as.IDate("2020-01-01"), as.IDate("2020-01-20"), by = "day")
)

data

dates_wanted <- seq(as.IDate("2020-01-01"), as.IDate("2020-01-31"), by = "day")

names_A <- data[group == "A"][["id"]]

names_B <- data[group == "B"][["id"]]

names_A <- CJ(group = "A", id = names_A, date = dates_wanted, unique = TRUE)

names_B <- CJ(group = "B", id = names_B, date = dates_wanted, unique = TRUE)

alldates <- rbind(names_A, names_B)

alldates

data[alldates, on = .(group, id, date)]

推荐答案

您还可以执行以下操作:

data[, .(date=dates_wanted), .(group,id)]

输出:

     group     id       date
  1:     A  frank 2020-01-01
  2:     A  frank 2020-01-02
  3:     A  frank 2020-01-03
  4:     A  frank 2020-01-04
  5:     A  frank 2020-01-05
 ---                        
120:     B edward 2020-01-27
121:     B edward 2020-01-28
122:     B edward 2020-01-29
123:     B edward 2020-01-30
124:     B edward 2020-01-31

R相关问答推荐

使用gggrassure减少地块之间的空间

获取列中值更改的行号

在不安装软件包的情况下测试更新

在R中替换函数中的特定符号

从R导出全局环境中的所有sf(numrames)对象

如何在kableextra调用cell_spec()中忽略NA?

derrr mutate case_when grepl不能在R中正确返回值

如何写商,水平线,在一个单元格的表在R

如何在R forestplot中为多条垂直线分配唯一的 colored颜色 ?

将二进制数据库转换为频率表

将一个字符串向量调整为与其他字符串向量完全相同的大小

R如何将列名转换为更好的年和月格式

使用ggplot2绘制具有边缘分布的坡度图

如何使用grepl()在数据帧列表中 Select 特定字符串?

在REST API中使用参数R

修复标签重叠和ggploy内的空间

为什么在POSIXct-times的向量上循环会改变R中的类型?

如何将两个用不同的运算符替换*的矩阵相乘

如何在GGPlot中控制多个图例和线型

如何在基数R中根据矩阵散点图中的因子给数据上色?