小编use*_*158的帖子

R中的SAS宏变量

我对SAS编程环境非常熟悉.我目前正在尝试学习使用R编程.我发现使用SAS宏可以减少编程中重复代码的数量.特别是,我发现使用宏变量有用的调整数据集名称和变量名称的部分.然而,在RI中没有找到可以复制这个的东西.

例如,在SAS中,我可以编写一个简单的宏来在两个数据集上运行proc,如下所示:

%macro means(dataset_suffix = , var1_suffix= );
proc means data = data&dataset_suffix;
var var1&var1_suffix;
run;
%mend means;
%means(dataset_suffix = _suf1, var1_suffix = _suf2);
%means(dataset_suffix = _suf3, var1_suffix = _suf4);
Run Code Online (Sandbox Code Playgroud)

运行此代码会执行两次宏,从而导致运行以下代码

proc means data = data_suf1;
var var_suf2;
run;
proc means data = data_suf3;
var var_suf4;
run;
Run Code Online (Sandbox Code Playgroud)

我已经研究了R的用户定义函数以及使用列表.我知道R中没有一个与proc手段直接相似的程序.然而,我的问题的焦点是如何使用宏变量来引用R中具有相似前缀但不同后缀的不同对象.我也考虑过使用粘贴功能.任何有关这方面的帮助将非常感激.

macros r list sas

3
推荐指数
1
解决办法
6753
查看次数

转换数组,其中元素具有不同数量的逗号分隔数据到data.frame

我有一个冗长的数组,其中每个元素都有逗号分隔的数据.每个元素中的第一条数据是标识符ID.其余数据由两组数据组成.我们将它们称为X和Z.这是一个例子.

我的数组看起来像这样:

ABC,1,1.5,2,2.4,3,3.1
DEF,1,1.7,2,0.9
GHI,3,8.2
JKL,1,1.5,2,2.4,3,3.13,8.2
Run Code Online (Sandbox Code Playgroud)

我希望它将它转换为如下所示的数据框:

    ID X   Z
1  ABC 1 1.5
2  ABC 2 2.4
1  ABC 1 1.5
2  ABC 2 2.4
3  ABC 3 3.1
4  DEF 1 1.7
5  DEF 2 0.9
6  GHI 3 8.2
7  JKL 1 1.5
8  JKL 2 2.4
9  JKL 3 3.1
10 JKL 3 8.2
Run Code Online (Sandbox Code Playgroud)

我写了一个循环(粘贴在下面),它将为我做这个,但它是非常低效的.我的数组接近1,000,000个元素,并且循环正在进行中.任何的意见都将会有帮助.我仍然熟悉应用函数,但我不知道在这种情况下如何写一个.

在此代码中,具有原始数据的数组称为"行".

#write a function to test if an itteration is even
is.even <- function(x) x %% 2 == 0 

#create the …
Run Code Online (Sandbox Code Playgroud)

performance r

2
推荐指数
1
解决办法
76
查看次数

R:通过组X有效地识别变量Z的最高N值

我有一个看起来像这样的数据表.

ID <- c(rep("ABC",4), rep("DEF",4), rep("GHI",5))
X  <- c(rep(c(1,2,3,4),3),5)
set.seed(1234)
Z  <- runif(13,min=0, max =1)  
a <- data.table(ID, X, Z)
a

     ID X           Z
 1: ABC 1 0.113703411
 2: ABC 2 0.622299405
 3: ABC 3 0.609274733
 4: ABC 4 0.623379442
 5: DEF 1 0.860915384
 6: DEF 2 0.640310605
 7: DEF 3 0.009495756
 8: DEF 4 0.232550506
 9: GHI 1 0.666083758
10: GHI 2 0.514251141
11: GHI 3 0.693591292
12: GHI 4 0.544974836
13: GHI 5 0.282733584
Run Code Online (Sandbox Code Playgroud)

我想生成一个在每个X子组中具有N个最高值Z的数据帧.所以我们说N是2.我想最终得到一个如下所示的数据集:

   X  ID         Z …
Run Code Online (Sandbox Code Playgroud)

performance r data.table

1
推荐指数
1
解决办法
50
查看次数

标签 统计

r ×3

performance ×2

data.table ×1

list ×1

macros ×1

sas ×1