J'ai dataframe comme ceci: p>
Je souhaite créer une nouvelle colonne qui est la somme des autres colonnes en ignorant na code> s'il y a une valeur numérique dans une rangée. Mais si
na code>. P>
3 Réponses :
Disons que votre bloc de données s'appelle df
cbind(df, apply(df, 1, function(x){if (all(is.na(x))) {NA} else {sum(x, na.rm = T)}))
Notez que si votre bloc de données a d'autres colonnes, vous devrez restreindre l'appel df
dans appliquer pour n'être que les colonnes que vous recherchez.
Comme il s'agit de votre première activité ici sur SO, vous devriez jeter un œil à ceci qui décrit comment un et des exemples reproductibles sont faits. Cela est certainement nécessaire à l'avenir, si vous avez d'autres questions. Une image n'est généralement pas acceptée comme point de départ.
Heureusement, votre table était petite. Je l'ai transformé en tribble, puis j'ai utilisé rowSums
pour calculer les nombres que vous semblez vouloir.
df <- tibble::tribble( ~x, ~y, ~z, 6000, NA, NA, NA, NA, NA, 100, 7000, 1000, 0, 0, NA ) df$sum <- rowSums(df, na.rm = T) df #> # A tibble: 4 x 4 #> x y z sum #> <dbl> <dbl> <dbl> <dbl> #> 1 6000 NA NA 6000 #> 2 NA NA NA 0 #> 3 100 7000 1000 8100 #> 4 0 0 NA 0
Créé le 2020-06- 15 par le package reprex (v0.3.0)
Vous pouvez compter les valeurs NA code> dans
df code>. Si dans une rangée, il n'y a pas de valeur non code> NA code> Vous pouvez attribuer une sortie sous forme
na code> ou calculer la SUM de ligne autrement à l'aide de
rowsums code>.
df <- structure(list(x = c(6000, NA, 10000, 100, 0), y = c(NA, NA,
NA, 7000, 0), z = c(NA, NA, NA, 1000, NA)), class = "data.frame",
row.names = c(NA, -5L))
df $ col <- rowSums (df, na.rm = TRUE)