【问题标题】:R equivalent to SAS DO loopR 相当于 SAS DO 循环
【发布时间】:2018-10-03 10:08:01
【问题描述】:

ID 类型 销售日期 1 1 $ 5,027 2016 年 1 月 18 日
2 1 $ 2,646 2012 年 11 月 10 日
3 1 $ 7,549 2018 年 2 月 11 日
4 2 $ 4,536 2016 年 2 月 18 日
5 2 $ 3,118 2017 年 8 月 26 日
6 3 $ 9,815 2017 年 6 月 7 日
7 3 $ 885 2017 年 12 月 15 日
8 3 $ 2,911 2017 年 11 月 10 日
9 3 $ 1,823 2015 年 10 月 12 日
10 4 $ 5,723 2014 年 7 月 4 日
11 5 $ 2,612 2015 年 3 月 31 日
12 5 $ 3,344 2016 年 1 月 6 日
13 5 $ 4,215 2016 年 5 月 22 日
14 6 $ 5,500 2018 年 3 月 23 日

要将上述数据集(主要)拆分为类型,我们可以使用以下宏。如何在 R 中做同样的事情。 提前致谢。

%MACRO split;  

%DO m = 1 %TO 6 ;  


DATA type_%eval(&m) ;  


SET main ;  


IF Type = &m then output type_%eval(&m) ;  


RUN ;  

%END ;  

%MEND split ;  

%split ;  

ID 类型 销售日期
1 1 $ 5,027 2016 年 1 月 18 日
2 1 $ 2,646 2012 年 11 月 10 日
3 1 $ 7,549 2018 年 2 月 11 日

ID 类型 销售日期
4 2 $ 4,536 2016 年 2 月 18 日
5 2 $ 3,118 2017 年 8 月 26 日

ID 类型 销售日期
6 3 $ 9,815 2017 年 6 月 7 日
7 3 $ 885 2017 年 12 月 15 日
8 3 $ 2,911 2017 年 11 月 10 日
9 3 $ 1,823 2015 年 10 月 12 日

这将为我提供以下数据集 Type1、Type2、Type3 ..... Type6

【问题讨论】:

    标签: r loops sas


    【解决方案1】:

    您可以使用split。如果您的数据框称为df,请执行

    df.list <- split(df, df$Type)
    

    这会为您提供数据框列表。您可以使用$Type 的值(如下所示)获取单个数据帧。由于这些名称不遵循不以数字开头的约定,因此您必须在它们周围加上刻度或引号

    df.list$'1'
    

    您还可以使用列表索引,例如df.list[3] 第三个 data.frame。在您的示例中,巧合的是,这些有时会对齐,例如df.list$'1'df.list[1] 相同。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-22
      • 1970-01-01
      • 1970-01-01
      • 2022-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多