новая переменная, кратная if / then код из sas в r - PullRequest
0 голосов
/ 30 мая 2019

Я хотел бы преобразовать в R этот код sas, чтобы создать новую переменную из существующей:

if eta=0 then eta1=0;
if 0<eta<=4 then eta1=1;
if 4<eta<=9 then eta1=2;
if 9<eta<=14 then eta1=3;
if 14<eta<=19 then eta1=4;
if 19<eta<=24 then eta1=5;
if 24<eta<=29 then eta1=6;

.... и т. Д.

Я пытался сifelse, но здесь моя новая переменная eta1 не является двоичной1015 *

но они не работают .. поэтому я не могу понять, как создать его без потери информации

Как я могу это исправить?

Спасибо!

Ответы [ 2 ]

1 голос
/ 31 мая 2019

я это исправил

pop$eta1<-cut(pop$ETA, c(0,1,5,10,15,20,25,30,35,40,45,50,55,60,65,70,75,80,85,90,95,120), right=FALSE, labels=c(1:21))
0 голосов
/ 31 мая 2019

Я считаю, что простым решением было бы создать фрейм данных для преобразования (eta to eta1):

eta2eta1 <- data.frame(eta = 0:29,
       eta1 = c(0, rep(1, 4), rep(2, 5), rep(3, 5), rep(4, 5), rep(5, 5), rep(6, 5)))
eta eta1
0    0
1    1
2    1
3    1
4    1
5    2
6    2
7    2
8    2
9    2
[...]

А затем объединить наборы данных, используя просто left_join:

# install.packages("tidyverse") # if needed
library(tidyverse)

left_join(originaldata, eta2eta1, by = "eta")

операторы if-else

Более обременительным решением, на мой взгляд, было бы использование ifelse операторов, таких как:

originaldata %>% 
  mutate(eta1 = ifelse(eta == 0, 0,
                ifelse(eta %in% 1:4, 1,
                ifelse(eta %in% 5:9, 2,
                ifelse(eta %in% 10:14, 3,
                ifelse(eta %in% 15:19, 4, 
                ifelse(eta %in% 20:24, 5, 6)))))))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...