supprimer les valeurs NA et combiner les valeurs non NA dans une seule colonne


NMB

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

Akrun

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 Roption 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"))

Articles connexes


Ignorer les valeurs NA d'une colonne dans une instruction

Raúl Valentin Fonseca Jusqu'à présent, j'ai travaillé avec un ensemble de données de taille moyenne pour une enquête Ocupation (environ 200 Mo au total), voici les données si vous souhaitez les consulter: https://drive.google.com/drive/folders/1Od8zlOE3U3DO0YR