Реляционный набор данных с метками времени: вычисление времени каждого двухстороннего закрытия - PullRequest
0 голосов
/ 10 января 2019

У меня есть набор данных с меткой времени, подобный следующему

t = c("2006-01-02 09:09:38 UTC", "2006-01-04 08:45:34 UTC", "2006-01-10 12:55:41 UTC", 
      "2006-01-20 09:33:54 UTC", "2006-02-02 11:36:06 UTC", "2006-02-15 08:51:03 UTC", 
      "2007-06-07 16:26:56 UTC", "2008-04-01 13:20:20 UTC", "2008-04-03 10:53:50 UTC")

seller = c("A", "E", "B", "B", "C", "F", "A", "B", "E")
buyer = c("B", "F", "A", "C", "B", "G", "C", "A", "G")

data = cbind.data.frame(t, seller, buyer)

                        t seller buyer
1 2006-01-02 09:09:38 UTC      A     B
2 2006-01-04 08:45:34 UTC      E     F
3 2006-01-10 12:55:41 UTC      B     A
4 2006-01-20 09:33:54 UTC      B     C
5 2006-02-02 11:36:06 UTC      C     B
6 2006-02-15 08:51:03 UTC      F     G
7 2007-06-07 16:26:56 UTC      A     C
8 2008-04-01 13:20:20 UTC      B     A
9 2008-04-03 10:53:50 UTC      E     G

Я хотел бы рассчитать время до транзитивного замыкания для всех возможных двухсторонних путей. Вот что я имею в виду:

У меня есть два двухсторонних канала, т. Е.

  1. A-> B, B-> C
  2. E-> F, F-> G

и я хочу вычислить время, необходимое для

  1. A-> C
  2. E-> G

Спасибо за помощь!

Желаемые выходы должны быть:

 # 1. List will all the two-path that close into a transitive triad
out1 = list(o1 = data[c(1,4,7), ], o2 = data[c(2,6,9), ])

out1

$o1
                        t seller buyer
1 2006-01-02 09:09:38 UTC      A     B
4 2006-01-20 09:33:54 UTC      B     C
7 2007-06-07 16:26:56 UTC      A     C

$o2
                        t seller buyer
2 2006-01-04 08:45:34 UTC      E     F
6 2006-02-15 08:51:03 UTC      F     G
9 2008-04-03 10:53:50 UTC      E     G


# 2. Time to transitive closure
out2 = list(o1 = difftime(out1$o1[3,1], out1$o1[1,1]), o2 = difftime(out1$o2[3,1], out1$o2[1,1]))

out2

$o1
Time difference of 521.262 days

$o2
Time difference of 820.0474 days
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...