【发布时间】:2016-05-13 10:22:39
【问题描述】:
假设我有两个数据框,
df1
id time1
1 2016-04-07 21:39:10
1 2016-04-05 11:19:17
2 2016-04-03 10:58:25
2 2016-04-02 21:39:10
df2
id time2
1 2016-04-07 21:39:11
1 2016-04-05 11:19:18
1 2016-04-06 21:39:11
1 2016-04-04 11:19:18
2 2016-04-03 10:58:26
2 2016-04-02 21:39:11
2 2016-04-04 10:58:26
2 2016-04-05 21:39:11
我想为 df1 中的每个条目找到 df2 中的最短时间差。假设我们取第一个条目,它的 id 为 1,所以我想遍历 df2,过滤 id 1,然后检查 df1 的一个条目与 df2 的其余条目之间的时间差,找到最短的差并获取相应的条目.我的示例输出应该是
id time time2 diff(in secs)
1 2016-04-07 21:39:10 2016-04-07 21:39:10 1
1 2016-04-05 11:19:17 2016-04-05 11:19:17 1
2 2016-04-03 10:58:25 2016-04-03 10:58:25 1
2 2016-04-02 21:39:10 2016-04-02 21:39:10 1
以下是我的尝试,
for(i in unique(df1$id)){
temp1 = df1[df1$id == i,]
temp2 = df2[df2$id == i,]
for(j in unique(df1$time1){
for(k in unique(df2$time2){
diff = abs(df1$time1[j] - df2$time2[k]
print(diff)}}}
在此之后我无法进步,出现很多错误。有人可以帮我纠正这个吗?可能会建议一种更有效的方法来做到这一点?任何帮助将不胜感激。
更新:
可重现的数据:
df1 <- data.frame(
id = c(1,1,2,2),
time1 = c('2016-04-07 21:39:10', '2016-04-05 11:19:17', '2016-04-03 10:58:25', '2016-04-02 21:39:10')
)
df2 <- data.frame(
id = c(1,1,1,1,2,2,2,2),
time2 = c('2016-04-07 21:39:11', '2016-04-05 11:19:18','2016-04-07 21:39:11', '2016-04-05 11:19:18', '2016-04-03 10:58:26', '2016-04-02 21:39:11','2016-04-03 10:58:26', '2016-04-02 21:39:11')
)
df1$time1 = as.POSIXct(df1$time1)
df2$time2 = as.POSIXct(df2$time2)
【问题讨论】:
-
能否添加生成
df1和df2的代码 -
ids 重要吗?听起来像是id中的最短差异@ -
@jaimedash yes 以及相应的时间
-
@Divi 会做的
-
请使用
dput提供数据。
标签: r dataframe greatest-n-per-group