从一个非常简单的数据框架

    time1 <- as.Date("2010/10/10")
    time2 <- as.Date("2010/10/11")
    time3 <- as.Date("2010/10/12")
    test <- data.frame(Sample=c("A","B", "C"), Date=c(time1, time2, time3))

我如何获得一个具有成对的样本A,样本B,样本C之间的时间间隔(样本之间经过的天数)的矩阵?
   A  B  C
A  0  1  2
B  1  0  1
C  2  1  0

/edit:更改日期的格式。不便之处,敬请原谅

最佳答案

要获得实际的天数计算,您可以将天数转换为自某个预定义日期以来的日期,然后使用dist。下面的示例(转换了您的日子,我怀疑他们是否代表了您的期望):

time1 <- as.Date("02/10/10","%m/%d/%y")
time2 <- as.Date("02/10/11","%m/%d/%y")
time3 <- as.Date("02/10/12","%m/%d/%y")
test <- data.frame(Sample=c("A","B", "C"), Date=c(time1, time2, time3))
days_s2010 <- difftime(test$Date,as.Date("01/01/10","%m/%d/%y"))
dist_days <- as.matrix(dist(days_s2010,diag=TRUE,upper=TRUE))
rownames(dist_days) <- test$Sample; colnames(dist_days) <- test$Sample
dist_days然后打印出来:
> dist_days
    A   B   C
A   0 365 730
B 365   0 365
C 730 365   0

实际上dist不需要将日期转换为几天,只需执行dist(test$Date)就可以工作几天。

关于r - 日期的时间距离矩阵,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37967965/

10-09 16:43
查看更多