Есть ли код для определения количества критериев, которым соответствует строка в R? - PullRequest
0 голосов
/ 12 марта 2020

Я пытаюсь найти способ назначить столбец, в котором будет указано количество критериев, которым соответствует определенная строка. Например, я смотрю на то, сколько факторов риска сердечных заболеваний кто-то встречал, и пытаюсь провести порядковую регрессию по этим значениям. Я пытался

cvd_status <- ifelse( data_tot$X5_A_01_d_Heart.Disease=="1"|data_tot$X5_A_01_e_Stroke=="1"|data_tot$X5_A_01_f_Chronic.Kidney.Disease==1, 1,0) 

, но это только дает мне понять, есть ли у людей какие-либо факторы риска, а не сколько у них факторов риска. Есть ли способ выяснить, сколько факторов риска у кого-то будет?

Редактировать: Переменные не просто двоичные, а либо 1 или 2, либо диапазоны чисел.

1 Ответ

0 голосов
/ 12 марта 2020

Если переменные содержат только 0 или 1, то можно использовать следующее:

with(data_tot,
     rowSums(cbind(X5_A_01_d_Heart.Disease, 
                   X5_A_01_e_Stroke,
                   X5_A_01_f_Chronic.Kidney.Disease))
)

Редактировать :

И если они закодированы как 1 (да) и 2 (нет), плюс, если будут включены другие факторы риска, такие как кровяное давление и уровень холестерина, И в этих переменных фактора риска отсутствуют пропущенные значения, тогда вы можете использовать нечто похожее на следующее:

data_tot %>%
  mutate(CVD_Risk.Factors=
           (Heart == 1) + 
           (Stroke == 1) + 
           (CKD == 1) +
           (Systolic_BP  >= 130) + (Diastolic_BP >= 80) +
           (Cholesterol > 150))

  Heart Stroke CKD Systolic_BP Diastolic_BP Cholesterol CVD_Risk.Factors
1     1      1   2         118           90         200                4
2     2      1   2         125           65         150                1
3     2      1   1         133           95         190                5
4     1      1   2         120           87         250                4
5     2      2   2         155          110          NA               NA
6     2      2   2         130          105         140                2

Вы можете видеть, что если есть пропущенные значения, это не будет работать. Одним из решений является использование rowwise, а затем sum.

data_tot %>%
  rowwise() %>%  # This tells R to apply a function by the rows of the selected inputs
  mutate(CVD_Risk.Factors=sum(  # This function has an "na.rm" argument
           (Heart == 1), 
           (Stroke == 1), 
           (CKD == 1),
           (Systolic_BP  >= 130), (Diastolic_BP >= 80),
           (Cholesterol > 150), na.rm=TRUE))  # Omit NA in the summations

# A tibble: 6 x 7
  Heart Stroke   CKD Systolic_BP Diastolic_BP Cholesterol CVD_Risk.Factors
  <dbl>  <dbl> <dbl>       <dbl>        <dbl>       <dbl>            <int>
1     1      1     2         118           90         200                4
2     2      1     2         125           65         150                1
3     2      1     1         133           95         190                5
4     1      1     2         120           87         250                4
5     2      2     2         155          110          NA                2 # not NA
6     2      2     2         130          105         140                2

Data :

data_tot <- data.frame(Heart=c(1,2,2,1,2,2),
                       Stroke=c(1,1,1,1,2,2),
                       CKD=c(2,2,1,2,2,2),
                       Systolic_BP=c(118,125,133,120,155,130),
                       Diastolic_BP=c(90,65,95,87,110,105),
                       Cholesterol=c(200,150,190,250,NA,140))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...