supprimer les valeurs NA et combiner les valeurs non NA dans une seule colonne
J'ai un ensemble de données qui a des valeurs numériques et NA dans toutes les colonnes. Je voudrais créer une nouvelle colonne avec toutes les valeurs non NA et conserver les noms de ligne
v1 v2 v3 v4 v5
a 1 NA NA NA NA
b NA 2 NA NA NA
c NA NA 3 NA NA
d NA NA NA 4 NA
e NA NA NA NA 5
J'ai essayé d'utiliser la fonction coalesce de dplyr
digital_metrics_FB <- fb_all_data %>%
mutate(fb_metrics = coalesce("v1",
"v2",
"v3",
"v4",
"v5"))
et a également essayé une fonction d'application
df2 <- sapply(fb_all_data,function(x) x[!is.na(x)])
ne peut toujours pas le faire fonctionner.
Je recherche le résultat final où toutes les valeurs non NA se réunissent dans la dernière colonne et les noms de lignes sont préservés
final
a 1
b 2
c 3
d 4
e 5
Toute aide serait très appréciée
On peut utiliser pmax
do.call(pmax, c(fb_all_data , na.rm = TRUE))
S'il y a plus d'un élément non-NA et que vous souhaitez combiner sous forme de chaîne, une base R
option simple serait
data.frame(final = apply(fb_all_data, 1, function(x) toString(x[!is.na(x)])))
Ou en utilisant coalesce
library(dplyr)
library(tibble)
fb_all_data %>%
rownames_to_column('rn') %>%
transmute(rn, final = coalesce(v1, v2, v3, v4, v5)) %>%
column_to_rownames('rn')
# final
#a 1
#b 2
#c 3
#d 4
#e 5
Ou en utilisant tidyverse
, pour plusieurs éléments non-NA
fb_all_data %>%
rownames_to_column('rn') %>%
transmute(rn, final = pmap_chr(.[-1], ~ c(...) %>%
na.omit %>%
toString)) %>%
column_to_rownames('rn')
REMARQUE: Ici, nous montrons les données que l'OP a montré à titre d'exemple et non un autre ensemble de données
Les données
fb_all_data <- structure(list(v1 = c(1L, NA, NA, NA, NA), v2 = c(NA, 2L, NA,
NA, NA), v3 = c(NA, NA, 3L, NA, NA), v4 = c(NA, NA, NA, 4L, NA
), v5 = c(NA, NA, NA, NA, 5L)), class = "data.frame",
row.names = c("a",
"b", "c", "d", "e"))