将日期数据帧转换为 R 中的时差对称矩阵
Turn dataframe of dates into time difference symm matrix in R
我有一个字母和日期的数据框:
Dates <- data.frame(X = c("A", "B", "C", "D"), Y = c("1/1/1988","1/1/2000","11/1/1996", "2/1/1990"))
Dates$Y <- as.Date(Dates$Y, "%m/%d/%Y")
我正在尝试将此数据框转换为对称矩阵,其中矩阵中的值是所有可能的字母组合的日期之间的绝对差值(以年为单位)。所以输出看起来像这样:
Output <- matrix(c(0, 12.01, 8.84, 12.01, 0, 3.17, 8.84, 3.17, 0), nrow=3, ncol=3,
dimnames = list(c("A", "B", "C"),
c("A", "B", "C")))
非常感谢您!
我们可以使用 outer
和我们的自定义函数来计算以年为单位的日期差异。
outer(Dates$Y, Dates$Y, FUN = function(x,y)
round(abs(as.numeric(difftime(x, y, unit="weeks"))/52.25), 2))
# [,1] [,2] [,3] [,4]
#[1,] 0.00 11.98 8.82 2.08
#[2,] 11.98 0.00 3.16 9.90
#[3,] 8.82 3.16 0.00 6.74
#[4,] 2.08 9.90 6.74 0.00
计算年份日期差异的代码取自here。
正如@thelatemail 在评论中提到的那样,如果我们在 outer
abs(outer(Dates$Y, Dates$Y, difftime, units="weeks") / 52.25)
我有一个字母和日期的数据框:
Dates <- data.frame(X = c("A", "B", "C", "D"), Y = c("1/1/1988","1/1/2000","11/1/1996", "2/1/1990"))
Dates$Y <- as.Date(Dates$Y, "%m/%d/%Y")
我正在尝试将此数据框转换为对称矩阵,其中矩阵中的值是所有可能的字母组合的日期之间的绝对差值(以年为单位)。所以输出看起来像这样:
Output <- matrix(c(0, 12.01, 8.84, 12.01, 0, 3.17, 8.84, 3.17, 0), nrow=3, ncol=3,
dimnames = list(c("A", "B", "C"),
c("A", "B", "C")))
非常感谢您!
我们可以使用 outer
和我们的自定义函数来计算以年为单位的日期差异。
outer(Dates$Y, Dates$Y, FUN = function(x,y)
round(abs(as.numeric(difftime(x, y, unit="weeks"))/52.25), 2))
# [,1] [,2] [,3] [,4]
#[1,] 0.00 11.98 8.82 2.08
#[2,] 11.98 0.00 3.16 9.90
#[3,] 8.82 3.16 0.00 6.74
#[4,] 2.08 9.90 6.74 0.00
计算年份日期差异的代码取自here。
正如@thelatemail 在评论中提到的那样,如果我们在 outer
abs(outer(Dates$Y, Dates$Y, difftime, units="weeks") / 52.25)