R中的保留和滞后功能为SAS

 三心两意真实扭 发布于 2023-02-09 19:27

我正在寻找一个类似于R的函数lag1,lag2retain在SAS中使用我可以与data.tables一起使用的函数.

我知道R中有类似的功能embed,lag但它们不会返回单个值或前一个值.它们返回一组完整的向量.

R中有什么东西我可以用data.table吗?

有关SAS功能的更多信息:

保留

落后

Joris Meys.. 9

您必须意识到R的工作方式与SAS中的数据步骤非常不同.的lag在SAS功能在数据步骤中使用,并且被用于数据步骤的隐含的循环结构.这同样适用于对retain功能,通过数据的循环会时只需保持常数的值.

另一方面,R完全矢量化.这意味着您必须重新考虑您想要做的事情,并相应地进行调整.

retain在R中简单无用,因为R默认循环参数.如果要明确地执行此操作,您可能会查看例如rep()构造具有常量值和特定长度的向量.

lag是一个使用索引的问题,只是在向量中移动所有值的位置.为了保持相同长度的矢量,您需要添加一些NA并删除一些额外的值.

一个简单示例:此SAS代码滞后于变量x并添加year具有常量值的变量:

data one;
   retain year 2013;
   input x @@;
   y=lag1(x);
   z=lag2(x);
   datalines;
1 2 3 4 5 6
;

在R中,您可以编写自己的滞后函数,如下所示:

mylag <- function(x,k) c(rep(NA,k),head(x,-k))

该单行在向量的开头添加k倍NA,并从向量中删除最后的k个值.结果是lag1SAS中给出的滞后矢量等.

这允许类似的东西:

nrs <- 1:6 # equivalent to datalines
one <- data.frame(
   x = nrs,
   y = mylag(nrs,1),
   z = mylag(nrs,2),
   year = 2013  # R automatically loops, so no extra command needed
)

结果是:

> one
  x  y  z year
1 1 NA NA 2013
2 2  1 NA 2013
3 3  2  1 2013
4 4  3  2 2013
5 5  4  3 2013
6 6  5  4 2013

完全相同的data.table对象也适用.这里重要的注意事项是重新思考你的策略:不要像使用SAS中的DATA步骤那样循环思考,而是在使用R时必须开始考虑向量和索引.

1 个回答
  • 您必须意识到R的工作方式与SAS中的数据步骤非常不同.的lag在SAS功能在数据步骤中使用,并且被用于数据步骤的隐含的循环结构.这同样适用于对retain功能,通过数据的循环会时只需保持常数的值.

    另一方面,R完全矢量化.这意味着您必须重新考虑您想要做的事情,并相应地进行调整.

    retain在R中简单无用,因为R默认循环参数.如果要明确地执行此操作,您可能会查看例如rep()构造具有常量值和特定长度的向量.

    lag是一个使用索引的问题,只是在向量中移动所有值的位置.为了保持相同长度的矢量,您需要添加一些NA并删除一些额外的值.

    一个简单示例:此SAS代码滞后于变量x并添加year具有常量值的变量:

    data one;
       retain year 2013;
       input x @@;
       y=lag1(x);
       z=lag2(x);
       datalines;
    1 2 3 4 5 6
    ;
    

    在R中,您可以编写自己的滞后函数,如下所示:

    mylag <- function(x,k) c(rep(NA,k),head(x,-k))
    

    该单行在向量的开头添加k倍NA,并从向量中删除最后的k个值.结果是lag1SAS中给出的滞后矢量等.

    这允许类似的东西:

    nrs <- 1:6 # equivalent to datalines
    one <- data.frame(
       x = nrs,
       y = mylag(nrs,1),
       z = mylag(nrs,2),
       year = 2013  # R automatically loops, so no extra command needed
    )
    

    结果是:

    > one
      x  y  z year
    1 1 NA NA 2013
    2 2  1 NA 2013
    3 3  2  1 2013
    4 4  3  2 2013
    5 5  4  3 2013
    6 6  5  4 2013
    

    完全相同的data.table对象也适用.这里重要的注意事项是重新思考你的策略:不要像使用SAS中的DATA步骤那样循环思考,而是在使用R时必须开始考虑向量和索引.

    2023-02-09 19:29 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有