在 R 中的两个 DataFrame 的多列上使用 Difftime 函数
Using Difftime function on Multiple columns of two DataFrames in R
我有两个数据框,每个都包含时间戳列,如下所示
图片:
Dataframe-1:
Dataframe-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 列执行,这会花费很多精力,我尝试了各种方法,使用应用函数和 for 循环,但它们似乎不起作用。
请帮助我找到一个解决方案,我可以一次性将 difftime
函数应用于整个列。
我们可以使用Map
在'df1'的相应列上应用difftime
,'df2'得到vector
的list
s
Map(difftime, df1, df2)
如果日期时间列只是列的子集,则对数据集进行子集化并应用 difftime
Map(difftime, df1[subCols], df2[subCols])
#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
遍历 df1
和 df2
的列以在 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
我有两个数据框,每个都包含时间戳列,如下所示 图片:
Dataframe-1:
Dataframe-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 列执行,这会花费很多精力,我尝试了各种方法,使用应用函数和 for 循环,但它们似乎不起作用。
请帮助我找到一个解决方案,我可以一次性将 difftime
函数应用于整个列。
我们可以使用Map
在'df1'的相应列上应用difftime
,'df2'得到vector
的list
s
Map(difftime, df1, df2)
如果日期时间列只是列的子集,则对数据集进行子集化并应用 difftime
Map(difftime, df1[subCols], df2[subCols])
#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
遍历 df1
和 df2
的列以在 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