Buenas noches Javier,
Tengo una inquietud: Al comenzar el procesamiento de los datos, comienzas
con
> head(resultado.Klspl.random)
solution std error z ratio
ped(Animal)_80396:spl(DIM, 6)_1 -0.026948407 0.5567686 -0.048401452
ped(Animal)_80396:spl(DIM, 6)_2 -0.047078428 0.5565063 -0.084596394
ped(Animal)_80396:spl(DIM, 6)_3 -0.067344169 0.5561976 -0.121079571
ped(Animal)_80396:spl(DIM, 6)_4 -0.089524791 0.5556541 -0.161116035
ped(Animal)_80396:spl(DIM, 6)_5 -0.022031096 0.5553722 -0.039669067
ped(Animal)_80411:spl(DIM, 6)_1 -0.005470429 0.5555828 -0.009846288
y cuando lo exportas a .txt y cambias los "_" y ":" por
espacios, obtienes
> head(resultado.Klspl.random)
V1 V2 V3 V4 V5 V6 V7
1 ped(Animal) 80396 spl(DIM,6) 1 -0.52237696 6.052892 -0.086302050
2 ped(Animal) 80396 spl(DIM,6) 2 -0.57648029 6.025452 -0.095674193
3 ped(Animal) 80396 spl(DIM,6) 3 1.17401903 6.023843 0.194895353
Por que cambiaron los valores -0.02694, -0.0470, -0.0673,... (e.g. primera
columna numerica del data.frame() con que comienzas) a
-0.52237, -0.57648, 1.17401, ... (e.g. segunda columna del data.frame()
resultante)? Estas realizando algun procedimiento aritmetico adicional?
Ahora, asumiendo que no realizas operacion alguna, las siguientes lineas
transforman tus datos originales (con "_" y ":" incluidos)
en otros datos
sin estos caracteres y en la forma que buscas usando ''V4" como la
variable
de interes. Aqui los datos originales los he llamado "x":
# 1. borrando lo que necesitas
# -- tambien puede hacerse con gsub() unicamente y para ello es necesario
descifrar el "patron"
res <- t(sapply(strsplit(as.character(x[,1]), "[_]|[:]"),
"[", c(2, 4)))
# 2. uniendolo a los datos originales
x <- cbind(res, x[,-1])
colnames(x) <- c(''Animal'', ''ID'',
''V4'', ''V5'', ''V6'')
x
# Animal ID V4 V5 V6
# 1 80396 1 -0.026948407 0.5567686 -0.048401452
# 2 80396 2 -0.047078428 0.5565063 -0.084596394
# 3 80396 3 -0.067344169 0.5561976 -0.121079571
# 4 80396 4 -0.089524791 0.5556541 -0.161116035
# 5 80396 5 -0.022031096 0.5553722 -0.039669067
# 6 80411 1 -0.005470429 0.5555828 -0.009846288
# 3. armando la base de datos de la manera que mencionas,
# siendo V4 la variable de interes
require(reshape)
x <- cast(x, Animal ~ ID, value = ''V4'')
colnames(x) <- c(''Animal'', paste(''valor'',
1:(ncol(x)-1), sep = ''''))
x
# Animal valor1 valor2 valor3 valor4 valor5
# 1 80396 -0.026948407 -0.04707843 -0.06734417 -0.08952479 -0.02203110
# 2 80411 -0.005470429 NA NA NA NA
Aqui, los numeros 1 y 2 en las filas son solo indicadores de las filas en el
data.frame() resultante y no son de interes.
Espero sea de utilidad,
Jorge Ivan Velez
2010/9/14 Javier Marcuzzi <>
> No se como explicar de forma fácil, pero obtengo los resultados que busco,
> pero a estos resultados los tengo que llevar a un data.frame para
> multiplicarlos a una matriz. El problema es que no tengo los valores
> ordenados de tal forma de poder multiplicar directamente las matrices, por
> lo cuál exporto los resultados a un archivo de texto, en estos reemplazo
> algunos caracteres por espacios en blanco, los importo a R, y usando sql
> extraigo los resultados, creando una columna para cada tipo se resultado
> según el sql, y recién ahí tengo mi matiz para multiplicarla a la otra
> matriz.
> Les paso un ejemplo, y si alguien puede indicarme una forma como para hacer
> todo el proceso automático desde R (sin tener que exportar, reemplazar
> caracteres, etc.) mi trabajo se agiliza enormemente.
>
> Los datos iniciales son los siguientes (provenientes de un análisis previo)
> > head(resultado.Klspl.random)
> solution std error z ratio
> ped(Animal)_80396:spl(DIM, 6)_1 -0.026948407 0.5567686 -0.048401452
> ped(Animal)_80396:spl(DIM, 6)_2 -0.047078428 0.5565063 -0.084596394
> ped(Animal)_80396:spl(DIM, 6)_3 -0.067344169 0.5561976 -0.121079571
> ped(Animal)_80396:spl(DIM, 6)_4 -0.089524791 0.5556541 -0.161116035
> ped(Animal)_80396:spl(DIM, 6)_5 -0.022031096 0.5553722 -0.039669067
> ped(Animal)_80411:spl(DIM, 6)_1 -0.005470429 0.5555828 -0.009846288
>
> Exporto estos resultados a un archivo txt, a este le borro la primer línea,
> y reemplazo (_) por un espacio en blanco, (:) por un espacio en blanco...
>
> Luego los importo a R de la siguiente forma
> resultado.Klspl.random <- read.table("C:/Users/Javier
> Marcuzzi/Desktop/A/resultado.Klspl.random.txt",
> header=FALSE, sep="", na.strings="NA",
dec=".", strip.white=TRUE)
>
> Los datos cambiaron a la siguiente presentación en el data.frame
>
> head(resultado.Klspl.random)
>
> V1 V2 V3 V4 V5 V6 V7
> 1 ped(Animal) 80396 spl(DIM,6) 1 -0.52237696 6.052892 -0.086302050
> 2 ped(Animal) 80396 spl(DIM,6) 2 -0.57648029 6.025452 -0.095674193
> 3 ped(Animal) 80396 spl(DIM,6) 3 1.17401903 6.023843 0.194895353
>
> Una vez importados, utilize sqldf para armar el data frame, que tiene la
> siguiente forma:
> Animal 80396 (el mismo animal se repite en 4 columnas, el renglón siguiente
> corresponde al siguiente animal), siguiente valor -0.5233 (es decir cuándo
> el animal se encuentra con el valor 1 en V4), siguiente columna: animal
> cuándo V4 vale 2 tomo el valor de V5 (-0.57)
>
> Queda algo como: Animal valor1 valor2 valor3
> 80396 -0.5233 -0.57 1.17
>
> Y me gustaría automatizar este proceso.
> ¿Alguien tiene una idea?
>
> Copio nuevamente los datos desde los cuáles inicio mi trabajo:
>
> > head(resultado.Klspl.random)
> solution std error z ratio
> ped(Animal)_80396:spl(DIM, 6)_1 -0.026948407 0.5567686 -0.048401452
> ped(Animal)_80396:spl(DIM, 6)_2 -0.047078428 0.5565063 -0.084596394
> ped(Animal)_80396:spl(DIM, 6)_3 -0.067344169 0.5561976 -0.121079571
> ped(Animal)_80396:spl(DIM, 6)_4 -0.089524791 0.5556541 -0.161116035
> ped(Animal)_80396:spl(DIM, 6)_5 -0.022031096 0.5553722 -0.039669067
> ped(Animal)_80411:spl(DIM, 6)_1 -0.005470429 0.5555828 -0.009846288
>
> _______________________________________________
> R-help-es mailing list
> R-help-es@r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-help-es
>
[[alternative HTML version deleted]]