0
votes

Utilisation de R, si les valeurs de la variable A ou B sont 'na', puis utilisez des valeurs dans des variables C et D au lieu de cela?

J'essaie de calculer la moyenne de deux variables et de la sortir en tant que nouvelle variable. Par exemple:

data$Average <- (data$Visit1 + data$Visit2) / 2


2 commentaires

J'utiliserais RowMeans (données [C ("visiter1", "visiter2")], na.rm = true)


Cela malheureusement ne répond pas à ma question.


3 Réponses :


0
votes

Voici une autre option pour votre question modifiée en utilisant dplyr :: Case_Quend Code> Pour filtrer les possibilités:

library(dplyr)

data$Average <- case_when(!is.na(data$Visit1) & !is.na(data$Visit2) ~ 
                                        (data$Visit1 + data$Visit2) / 2,
                          !is.na(data$Visit3) & !is.na(data$Visit4) ~ 
                                        (data$Visit3 + data$Visit4) / 2,
                          TRUE ~ (data$Visit1 + data$Visit2) / 2)


0 commentaires

0
votes

Un bon moyen de faire plusieurs ifelse est avec cas_quive xxx

Les avantages à cette approche sont les suivants: a) utilise < Code> Tairyverse et applicable à de nombreux cas de multiples Ifelse Les instructions, b) sont faciles à comprendre lorsque vous revenez au code ultérieurement, c) utilisez NA si certaines lignes ne satisfont pas votre Conditions (c.-à-d. True ~ na)

Plus documentation sur Case_Quend est ici: https://dplyr.tidyver.org/reference/case_when.html


0 commentaires

1
votes

Vous pouvez utiliser coalesce () code> à partir de dplyr code>. coalesce () code> utilisera la première valeur non manquante à chaque position. Je pense que cela a une meilleure lisibilité que ifelse () code> ou cas_quive () code>.

data %>% 
  mutate(
    Average = coalesce(
      as.numeric((data$Visit1 + data$Visit2) / 2),
      as.numeric((data$Visit3 + data$Visit4) / 2),
      as.numeric((data$Visit5 + data$Visit6) / 2)
    )
  )


0 commentaires