R: ¿Cuál es la forma más fácil de imprimir pares de valores de un hoja.de.datos?
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"
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