[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