2010-12-06 6 views
0

Dans l'exemple ci-dessous, j'ai deux lignes où Première, Dernière et Adresse 1/2 correspondent. Deux adresses email différentes mais avec un champ personnalisé supplémentaire. Ce que je voudrais faire est de sélectionner systématiquement la première ligne quand elle est présentée avec plusieurs lignes qui ressemble à ceci.Choix d'une ligne basée sur des correspondances et NA dans un champ différent

Lines <- " 
First, Last, Address, Address 2, Email, Custom1, Custom2, Custom3 
A, B, C, D, [email protected],1,2,3 
A, B, C, D, [email protected],1,2, 
" 
con <- textConnection(Lines) 

En d'autres termes:

SI Première & Dernière & Adresse 1 & Adresse 2 correspondance, choisir que celui où Custom3 n'est pas NA.

Comment est-ce que je pourrais appliquer ceci à un grand nombre de données?

Remarque: La vitesse n'est pas importante ici, un exemple avec plyr serait le plus utile.

Répondre

1

est ici une solution plyr:

con <- textConnection(Lines <- " 
First, Last, Address, Address 2, Email, Custom1, Custom2, Custom3 
A, B, C, D, [email protected],1,2,3 
A, B, C, D, [email protected],1,2, 
") 
x <- read.csv(con) 
close(con) 

ddply(x, .(First, Last, Address, Address.2), function(x2) x2[!is.na(x2$Custom3), c("Email", "Custom1", "Custom2", "Custom3")]) 
4

Voici quelques exemples non plyr, parce que je ne peux pas supporter d'être utile. ;-)

x <- read.csv(con) 
close(con) 

# Using split-apply-combine 
do.call(rbind, lapply(split(x, x[,1:4]), function(X) X[!is.na(X$Custom3),])) 

# Using ave 
x[!ave(x$Custom3, x[,1:4], FUN=is.na),] 
+1

Exemple non-plyr? Es tu fou? – Shane

+1

@Shane Je suis plus noisette que le mélange montagnard. –

Questions connexes