1

我有两个数据框,每个数据框都包含时间戳列,如下图所示:

数据框 1:

数据框-1

数据框 2:

数据框 2

我想找到数据帧的各个列之间的时间差,例如:DF1 的 Column1 的各个行和 DF2 的 Column1 的各个行之间的时间差。

我在上图中的每个数据框中只提到了三列,虽然我在原始数据集中的每一列中有 257 列,但我目前正在单独使用以下命令找到差异:

diff_time_1<- difftime(df1$t1,df2$l1)
diff_time_2<- difftime(df1$t2,df2$l2)..so on

如果我尝试对所有 257 列执行此操作,这将需要付出很多努力,我已经尝试了各种使用 apply 函数和 for 循环的方法,但它们似乎不起作用。

请帮助我找到一个解决方案,我可以一次将difftime函数应用于整个列。

4

2 回答 2

1

我们可以使用Mapapplydifftime到 'df1', 'df2' 的对应列来得到listsvector的a

Map(difftime, df1, df2)

如果日期时间列只是列的子集,则子集数据集并应用difftime

Map(difftime, df1[subCols], df2[subCols])
于 2017-07-30T17:49:08.877 回答
0
#DATA
mydates = seq.POSIXt(from = as.POSIXct("1970-01-01"),
                     to = as.POSIXct("1970-12-01"), by = "hours")
set.seed(42)
df1 = data.frame(C1 = sample(mydates, 5), C2 = sample(mydates, 5))
df2 = data.frame(C1 = sample(mydates, 5), C2 = sample(mydates, 5))

df1如果和的维度df2相同,则只需减去即可得到天数的差异

df1 - df2
#               C1              C2
#1  152.70833 days -140.62500 days
#2   72.79167 days  -80.70833 days
#3 -216.58333 days    5.75000 days
#4  192.00000 days   60.79167 days
#5   59.91667 days   48.33333 days

或者你可以sapply用来遍历列df1df2使用它们difftime

sapply(1:2, function(i) difftime(time1 = df1[,i], time2 = df2[,i], units = "hours"))
#      [,1]  [,2]
#[1,]  3665 -3375
#[2,]  1747 -1937
#[3,] -5198   138
#[4,]  4608  1459
#[5,]  1438  1160
于 2017-07-30T18:03:52.353 回答