2017-03-25 3 views
-1

J'ai un dataframe qui ressemble à ceci:Enlever le dernier non-NA Valeur de dataframe

Col1 Col2 Col3  Col4 Col5  Col6  Col7 
    10  A  B  C  NA  NA  NA 
    12  B  P  V  G  NA  NA 
    14  C  I  K  H  M  H 
    55  N  K  NA  NA  NA  NA 
    34  M  N  O  P  Q  NA 

Comment puis-je supprimer la dernière valeur non-NA dans chaque ligne et les remplacer par NA?

Sortie finale:

Col1 Col2 Col3  Col4 Col5  Col6  Col7 
    10  A  B  NA  NA  NA  NA 
    12  B  P  V  NA  NA  NA 
    14  C  I  K  H  M  NA 
    55  N  NA  NA  NA  NA  NA 
    34  M  N  O  P  NA  NA 

Répondre

3

Nous pouvons utiliser max.col pour trouver le dernier élément non-NA par ligne, puis avec l'indexation ligne/colonne, définissez les éléments à NA dans l'ensemble de données d'origine

df1[cbind(1:nrow(df1), max.col(!is.na(df1), 'last'))] <- NA 
df1 
# Col1 Col2 Col3 Col4 Col5 Col6 Col7 
#1 10 A B <NA> <NA> <NA> <NA> 
#2 12 B P V <NA> <NA> <NA> 
#3 14 C I K H M <NA> 
#4 55 N <NA> <NA> <NA> <NA> <NA> 
#5 34 M N O P <NA> <NA> 
+0

Merci @akrun. Comme tout cela provient de cette question que je n'arrive pas à comprendre, j'essaie de la décomposer pièce par pièce. http://stackoverflow.com/questions/43006044/match-dataframes-excluding-last-non-na-value-and-disregarding-order –