2017-09-21 2 views
-1

J'ai plusieurs colonnes (120) dans une trame de données. Je souhaite créer une nouvelle colonne dans cette base de données, chaque ligne contenant les valeurs uniques (en ignorant les valeurs NA) des valeurs de chaque ligne des 120 colonnes. Par exemple:trouver unique une ligne d'une trame de données R

V1 V2 V3 V4 V5 
a a NA c d 
c d e f e 
x x x NA NA 

une colonne V6 devrait être ajouté

V6 
a c d 
c d e f 
x 

Toute suggestion est plus que bienvenue!

Wannes

Répondre

1

En utilisant apply et toString

db$New=apply(db,1,function(x) toString(sort(unique(x[!is.na(x)])))) 
db 
    V1 V2 V3 V4 V5  New 
1 a a <NA> c d a, c, d 
2 c d e f e c, d, e, f 
3 x x x <NA> <NA>   x 

Ou en utilisant paste

db$New=apply(db,1,function(x) paste(sort(unique(x[!is.na(x)]),collapse = ' '))) 
db 
    V1 V2 V3 V4 V5  New 
1 a a <NA> c d a c d 
2 c d e f e c d e f 
3 x x x <NA> <NA>  x 

Le ajouté sort assure que le même ensemble de valeurs uniques apparaît toujours dans le même ordre.

+1

Il peut également être utile d'entourer le 'unique()' dans un sort() ', de sorte que les mêmes ensembles uniques sortent toujours dans le même ordre. –

+1

@AndrewGustar Oui vous avez raison, n'hésitez pas à la modifier ~ ;-) – Wen