【发布时间】:2023-03-17 17:41:01
【问题描述】:
我正在尝试学习 R,并且我在 SAS 中做了 10 多年的一些事情,但我无法完全弄清楚在 R 中做的最佳方法。拿这些数据:
id class t count desired
-- ----- ---------- ----- -------
1 A 2010-01-15 1 1
1 A 2010-02-15 2 3
1 B 2010-04-15 3 3
1 B 2010-09-15 4 4
2 A 2010-01-15 5 5
2 B 2010-06-15 6 6
2 B 2010-08-15 7 13
2 B 2010-09-15 8 21
我想在 4 个月的滚动窗口内按 id、类和滚动总和计算所需的列。请注意,并非每个 id 和 class 组合都存在所有月份。
在 SAS 中,我通常会采用以下两种方式之一:
-
RETAIN加上 id 和类。 -
PROC SQL在相应窗口中的 id、class 和 df1.d-df2.d 上从 df as df1 到 df as df2 进行左连接
解决此类问题的最佳 R 方法是什么?
t <- as.Date(c("2010-01-15","2010-02-15","2010-04-15","2010-09-15",
"2010-01-15","2010-06-15","2010-08-15","2010-09-15"))
class <- c("A","A","B","B","A","B","B","B")
id <- c(1,1,1,1,2,2,2,2)
count <- seq(1,8,length.out=8)
desired <- c(1,3,3,4,5,6,13,21)
df <- data.frame(id,class,t,count,desired)
【问题讨论】:
-
d是什么?它的定义不包含在您的设置代码中。 -
看看
zoo包。它可以相当容易地对时间对齐的数据进行这些滚动摘要。如果您对sql感到满意,您可以使用sqldf包。 -
@MatthewPlourde,我认为@ADJ 的意思是
df <- data.frame(t,class, id, count ,desired) -
我已经在使用 sqldf 包了。一方面,我还没有完全弄清楚如何在 sqldf 查询中使用 R 函数,就像我可以在 PROC SQL 中使用许多 SAS 函数之一一样。在这种情况下,我首选的解决方案将涉及使用 SAS 的 INTCK 函数的 R 版本以比我原始示例中描述的更复杂的方式进行日期运算。但由于我是从零开始学习 R,所以我更喜欢学习如何以 R 方式做事(参见 Joe 的评论)
-
老实说,对于这样的东西,我会继续使用 SAS。 :)