Использование функции Difftime для нескольких столбцов двух фреймов данных в R

У меня есть два фрейма данных, каждый из которых содержит столбцы временных меток, как на изображениях ниже:

Фрейм данных-1:

Dataframe-1

Фрейм данных-2:

Dataframe-2

Я хочу найти разницу во времени между каждым из соответствующих столбцов кадров данных, например: разница во времени между соответствующими строками столбца 1 в DF1 и соответствующими строками столбца 1 в DF2.

Я упомянул только три столбца в каждом фрейме данных на приведенном выше изображении, хотя у меня есть 257 столбцов в каждом столбце в моем исходном наборе данных, в настоящее время я нахожу разницу, используя команду ниже индивидуально:

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

Это потребует больших усилий, если я попытаюсь выполнить для всех 257 столбцов, я пробовал различные способы, используя функции apply и циклы for, но они, похоже, не работают.

Пожалуйста, помогите мне найти решение, в котором я могу применить функцию difftime ко всем столбцам за один раз.


person ashwin baldawa    schedule 30.07.2017    source источник


Ответы (2)


#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
person d.b    schedule 30.07.2017

Мы можем использовать Map, чтобы применить difftime к соответствующим столбцам 'df1', 'df2', чтобы получить list vectors

Map(difftime, df1, df2)

Если столбцы datetime являются только подмножеством столбцов, тогда подмножество наборов данных и применение difftime

Map(difftime, df1[subCols], df2[subCols])
person akrun    schedule 30.07.2017