2010-03-21 5 views

Répondre

6
apply(df, 1, paste, collapse="") 
5
with(df, paste(a, b, sep="")) 

Et cela devrait être plus rapide que apply .

À propos du chronométrage

Pour 10000 lignes nous obtenons:

df <- data.frame(
    a = sample(c("x","y"), 10000, replace=TRUE), 
    b = sample(1L:4L, 10000, replace=TRUE) 
) 

N = 100 
mean(replicate(N, system.time(with(df, paste(a, b, sep="")))["elapsed"]), trim=0.05) 
# 0.005778 
mean(replicate(N, system.time(apply(df, 1, paste, collapse=""))["elapsed"]), trim=0.05) 
# 0.09611 

augmentent donc la vitesse est visible quelques milliers.
C'est parce que la solution de Shane appelez paste pour chaque ligne séparément. Donc, il ya nrow(df) appels de paste, dans ma solution est un appel.

+2

Je doute que la vitesse soit sensiblement différente à moins d'avoir des millons de rangées. – hadley

+0

@hadley Ma solution est vectorisée, ce qui implique de meilleures performances. – Marek

Questions connexes