R: ¿Cuál es la forma más fácil de imprimir pares de valores de un hoja.de.datos?

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

  •  21-09-2019
  •  | 
  •  

Pregunta

Tengo un hoja.de.datos:

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

¿Cuál es la forma más fácil de imprimir cada par de valores como una lista de cadenas como esto:

  

"x1", "x2", "y1", "y2"

¿Fue útil?

Solución

apply(df, 1, paste, collapse="")

Otros consejos

with(df, paste(a, b, sep=""))

Y esto debe ser más rápido que apply.

Acerca de la sincronización

Para 10000 filas obtenemos:

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

Así aumento de la velocidad es visible para los pocos miles.
Es porque paste llamada solución de Shane para cada línea por separado. Así que hay llamadas nrow(df) de paste, en mi solución es una sola llamada.

Además, se puede usar la biblioteca 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")

Usted recibirá el siguiente resultado:

  concat
1 x1
2 x2
3 y3
4 y4
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top