我有一个带有因子列的数据框:
s<- data.frame( id = 901:910)
s$id<-as.factor(s$id)
我有一系列日期时间:
library(lubridate)
start <- now()+as.difftime(2,units="hours")
t <- seq(from = start, length.out = 60, by = "mins")
我想在t
的每个级别s
中添加序列s$id
作为列。
答案 0 :(得分:3)
作为expand.grid(id = s$id, time = t)
的替代方案,您还可以使用CJ
包的data.table
(交叉加入):
CJ(s$id,t)
给出:
V1 V2
1: 901 2015-09-19 14:52:23
2: 901 2015-09-19 14:53:23
3: 901 2015-09-19 14:54:23
4: 901 2015-09-19 14:55:23
5: 901 2015-09-19 14:56:23
---
596: 910 2015-09-19 15:47:23
597: 910 2015-09-19 15:48:23
598: 910 2015-09-19 15:49:23
599: 910 2015-09-19 15:50:23
600: 910 2015-09-19 15:51:23
如果要将其添加到s
,可以执行以下连接操作:
s <- setDT(s, key="id")[CJ(s$id,t)]
给出:
> s
id V2
1: 901 2015-09-19 15:08:39
2: 901 2015-09-19 15:09:39
3: 901 2015-09-19 15:10:39
4: 901 2015-09-19 15:11:39
5: 901 2015-09-19 15:12:39
---
596: 910 2015-09-19 16:03:39
597: 910 2015-09-19 16:04:39
598: 910 2015-09-19 16:05:39
599: 910 2015-09-19 16:06:39
600: 910 2015-09-19 16:07:39
另一种选择是使用crossing
中的tidyr
- 函数:
library(tidyr)
crossing(id = s$id, time = t)
给出了类似的结果。