[R-es] reordenando

Javier Marcuzzi javier.ruben.marcuzzi en gmail.com
Mie Sep 15 04:05:18 CEST 2010


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



Más información sobre la lista de distribución R-help-es