Как я могу написать эквивалентный код R для «Выбор оператора в Sas» - PullRequest
0 голосов
/ 28 октября 2019

Я пишу код в SAS, и теперь мне нужно преобразовать его в R, я вставил свой код r, но я знаю, что это неправильно. Мне нужно использовать что-то вроде «Выбрать в SAS». Пожалуйста, помогите мне преобразовать этот код SAS в R

data t2; set t; by nhi ass_yr ass_mth;
    R_G_Right = G1_Right;
    M_G_Right = G1_Right_Maculopathy;
    R_G_Left = G1_Left;
    M_G_Left = G1_Left_Maculopathy;
*   if G2 performed, use this   ;
    if G2_Right ne . then R_G_Right = G2_Right;
    if G2_Right_Maculopathy ne . then M_G_Right = G2_Right_Maculopathy;
    if G2_Left ne . then R_G_Left = G2_Left;
    if G2_Left_Maculopathy ne . then M_G_Left = G2_Left_Maculopathy;
*   collapse grades         ;
*   0 - remains 0           ;
*   1-2 ->      1           ;
*   3 ->        2           ;
*   4-5-6 ->    3           ;
select (R_G_Right);
    when (.) retgradeR = 0;
    when (0) retgradeR = 0;``
    when (1) retgradeR = 1;
    when (2) retgradeR = 1;`enter code here`
    when (3) retgradeR = 2;
    otherwise retgradeR = 3;
end;

1 Ответ

1 голос
/ 28 октября 2019

Вы можете сделать это таким образом, используя dplyr Я не переводил оператор by в R, потому что он не оказывает никакого влияния позже в коде. В принципе все можно превратить в функцию mutate, а case_when заменяет код select SAS.

library(dplyr)
t2 <- t %>% mutate(R_G_Right = G1_Right,
                   M_G_Right = G1_Right_Maculopathy,
                   R_G_Left = G1_Left,
                   M_G_Left = G1_Left_Maculopathy,
                   R_G_Right = ifelse(!is.na(G2_Right),G2_Right,R_G_Right),
                   M_G_Right = ifelse(!is.na(G2_Right_Maculopathy),G2_Right_Maculopathy,M_G_Right),
                   R_G_Left = ifelse(!is.na(G2_Left),G2_Left,R_G_Left),
                   M_G_Left = ifelse(!is.na(G2_Left_Maculopathy),G2_Left_Maculopathy,M_G_Left),
                   retgradeR =  case_when(
                                   is.na(R_G_Right)| R_G_Right==0  ~ 0,
                                   R_G_Right %in% c(1,2) ~ 1,            
                                   R_G_Right==3 ~2,
                                   TRUE ~ 3)
                   )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...