R: Quelle est la meilleure façon d'imprimer des paires de valeurs d'un data.frame?
Question
J'ai data.frame:
df<-data.frame(a=c("x","x","y","y"),b=c(1,2,3,4))
> df
a b
1 x 1
2 x 2
3 y 3
4 y 4
Quelle est la meilleure façon d'imprimer chaque paire de valeurs comme une liste de chaînes comme ceci:
"x1", "x2", "y1", "Y2"
La solution
apply(df, 1, paste, collapse="")
Autres conseils
with(df, paste(a, b, sep=""))
Et cela devrait être plus rapide que apply
.
A propos de timing
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
Donc augmenter la vitesse est visible pour quelques milliers.
Il est parce que l'appel de solution de Shane de paste
pour chaque ligne séparément. Donc, il y a des appels nrow(df)
de paste
, dans ma solution est un appel.
Vous pouvez également utiliser la bibliothèque sqldf
:
library("sqldf")
df<-data.frame(a=c("x","x","y","y"),b=c(1,2,3,4))
result <- sqldf("SELECT a || cast(cast(b as integer) as text) as concat FROM df")
Vous obtiendrez le résultat suivant:
concat
1 x1
2 x2
3 y3
4 y4
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow