gpt4 book ai didi

r - 计算因式时间变量之间的月份

转载 作者:行者123 更新时间:2023-12-04 10:42:34 25 4
gpt4 key购买 nike

我有一个看起来像这样的分解时间序列:

df <- data.frame(a=c("11-JUL-2004", "11-JUL-2005", "11-JUL-2006", 
"11-JUL-2007", "11-JUL-2008"),
b=c("11-JUN-1999", "11-JUN-2000", "11-JUN-2001",
"11-JUN-2002", "11-JUN-2003"))

首先,我想将其转换为 R 的原生格式。其次,我想计算两列之间的月数。

更新:

本质上,我正在尝试在 R 中重新创建我在 SPSS 中所做的事情。

在 SPSS 中我会:

  1. 将字符串转换为日期格式 DD-MMM-YYYY
  2. 计算。 RND((a-b)/60/60/24/30.416)

30.416 是 365/12 的缩写 我不太关心月份边缘情况,因此舍入操作。

最佳答案

df <- data.frame(c("11-JUL-2004","11-JUL-2005","11-JUL-2006","11-JUL-2007","11-JUL-2008"),
c("11-JUN-1999","11-JUN-2000","11-JUN-2001","11-JUN-2002","11-JUN-2003"))
names(df) <- c("X1","X2")
df <- within(df, X1 <- as.Date(X1, format = "%d-%b-%Y"))
df <- within(df, X2 <- as.Date(X2, format = "%d-%b-%Y"))

然后 difftime() 将给出以周为单位的差异:

> with(df, difftime(X1, X2, units = "weeks"))
Time differences in weeks
[1] 265.2857 265.1429 265.1429 265.1429 265.2857

或者如果我们使用 Brandon 的近似值:

> with(df, difftime(X1, X2) / 30.416)
Time differences in days
[1] 61.05339 61.02052 61.02052 61.02052 61.05339

我能得到的最接近 lubridate(正如 Dirk 强调的那样)是(使用上面的 df)

> m <- with(df, as.period(subtract_dates(X1, X2)))
> m
[1] 5 years and 1 month 5 years and 1 month 5 years and 1 month 5 years and 1 month 5 years and 1 month
> str(m)
Classes ‘period’ and 'data.frame': 5 obs. of 6 variables:
$ year : int 5 5 5 5 5
$ month : int 1 1 1 1 1
$ day : num 0 0 0 0 0
$ hour : int 0 0 0 0 0
$ minute: int 0 0 0 0 0
$ second: num 0 0 0 0 0

关于r - 计算因式时间变量之间的月份,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3866208/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com