从一个非常简单的数据框架
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/