R: Quelle est la meilleure façon d'imprimer des paires de valeurs d'un data.frame?

StackOverflow https://stackoverflow.com/questions/2488853

  •  21-09-2019
  •  | 
  •  

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"

Était-ce utile?

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
scroll top