2011-07-04 11 views
5

¿Es posible usar espacios en ddply?ddply y espacios en variables citadas

Estoy usando datos de una hoja de cálculo con muchos espacios en los nombres de columna y me gustaría conservar esos nombres porque más adelante quiero exportar estos datos con los mismos nombres de columna que el original. Hay más de 200 columnas y el uso de make.names, por supuesto, me dará los nombres propios, pero luego perderé los nombres de las columnas originales.

Sin embargo, parece que ddply no le gustan los espacios? ¿Hay alguna solución?

lev=gl(2, 3, labels=c("low", "high")) 
df=data.frame(factor=lev, "fac tor"=lev, response=1:6, check.names = FALSE) 

> ddply(df, c("factor"), summarize, r.avg=mean(response)) 
factor r.avg 
1 low  2 
2 high  5 

> ddply(df, c("fac tor"), summarize, r.avg=mean(response)) 
Error in parse(text = x) : <text>:1:5: unexpected symbol 
: fac tor 
+1

creo que quería decir 'check.names = FALSE arriba. 'VERDADERO' fuerza la coacción a' fac.tor' – Chase

+0

de hecho debería ser FALSO – Johan

Respuesta

8

Envolver los nombres de las columnas en los ticks de una sola respuesta (`) parece hacer el truco.

ddply(df, "`fac tor`", summarize, r.avg=mean(response)) 

También puede utilizar los índices de columnas que puede o no puede ser atractivo dependiendo de qué tan grande es hoja.de.datos y su conocimiento de la ubicación de cada columna de antemano.

ddply(df, 2, summarize, r.avg=mean(response)) 
+0

+1 Sí, usar los apoyos es el camino a seguir. FYI, plyr proporciona la función '.()' Que le permite especificar nombres de columnas sin tener que citarlos. Así que preferiría escribir 'ddply (df,. (\' Fac tor \ '), summarize, r.avg = mean (response))' – Andrie

+0

Gracias, esto es exactamente lo que necesito. – Johan

1

me acaba de utilizar una expresión regular para convertir los espacios a un personaje sin sentido, a continuación, convertir de nuevo al final:

lev=gl(2, 3, labels=c("low", "high")) 
df=data.frame(factor=lev, "fac tor"=lev, response=1:6, check.names = FALSE) 
colnames(df) <- gsub(" ","~",colnames(df)) 
Cuestiones relacionadas