Foro de debate

merge

merge

by Fernando Boris -
Number of replies: 9
Estimados tengo dos archivos excel, uno con 7 columnas y 200000 filas y otro con 3 columnas y 12000 filas, estos tienen en comun una sola columna. Yo necesito anexar datos de las tres columnas a la base de 7 columnas. Como hago para que me una la información, es decir que la base de 12000 filas se ubique segúa la comluna en común y logre ordenarce. Esto lo necesito ya que debo trabajar con solo los datos de los 12000 pero necesito la informaciín de las columnas de los 200000. bueno, tal vez no soy claro, creo que la aplicación merge es una alternativa, pero no he logrado usarlo con exito.
In reply to Fernando Boris

Re: merge

by Manuel Muñoz Márquez -
Hola Fernando:

Aporta muy poca información, es más fácil ayudar si proporcionas un pequeño ejemplo de lo que quieres hacer.

En cualquier caso, si he entendido bien lo que quieres hacer, un ejemplo sería
> a<-data.frame(x=1:10, y=(1:10)^2)
> a
x y
1 1 1
2 2 4
3 3 9
4 4 16
5 5 25
6 6 36
7 7 49
8 8 64
9 9 81
10 10 100
> b<-data.frame(x=0:11, z=(0:11)^3)
> b
x z
1 0 0
2 1 1
3 2 8
4 3 27
5 4 64
6 5 125
7 6 216
8 7 343
9 8 512
10 9 729
11 10 1000
12 11 1331
> merge(a,b, by.x='x')
x y z
1 1 1 1
2 2 4 8
3 3 9 27
4 4 16 64
5 5 25 125
6 6 36 216
7 7 49 343
8 8 64 512
9 9 81 729
10 10 100 1000

Saludos.
In reply to Manuel Muñoz Márquez

Re: merge

by Fernando Boris -
La idea es combinar estos dos archivos por la columna REGISTRO, que tienen en común, les escribo los dos archivos. Una vez combinados debo obtener aquellos individuos que tienen todas las comunas completas (calculo que quedarán unos 11000)
R version 2.13.1 (2011-07-08)
Copyright (C) 2011 The R Foundation for Statistical Computing
ISBN 3-900051-07-0
Platform: x86_64-apple-darwin9.8.0/x86_64 (64-bit)

R es un software libre y viene sin GARANTIA ALGUNA.
Usted puede redistribuirlo bajo ciertas circunstancias.
Escriba 'license()' o 'licence()' para detalles de distribucion.

R es un proyecto colaborativo con muchos contribuyentes.
Escriba 'contributors()' para obtener m'as informaci'on y
'citation()' para saber c'omo citar R o paquetes de R en publicaciones.

Escriba 'demo()' para demostraciones, 'help()' para el sistema on-line de ayuda,
o 'help.start()' para abrir el sistema de ayuda HTML con su navegador.
Escriba 'q()' para salir de R.

Durante la inicializaci'on - Mensajes de aviso perdidos
1: Setting LC_CTYPE failed, using "C"
2: Setting LC_COLLATE failed, using "C"
3: Setting LC_TIME failed, using "C"
4: Setting LC_MESSAGES failed, using "C"
[R.app GUI 1.41 (5874) x86_64-apple-darwin9.8.0]

WARNING: You're using a non-UTF8 locale, therefore only ASCII characters will work.
Please read R for Mac OS X FAQ (see Help) section 9 and adjust your system preferences accordingly.
[History restored from /Users/fernandoboris/.Rhistory]

> data1<- read.csv ("/Users/fernandoboris/Desktop/genotipos.csv",header=T)
> attach(data1)
> data1
REGISTRO.Crotal.Id..META.POP
1 ES030807762764;A-08015;0A001
2 ES070807762768;A-08016;0A002
3 ES080808652471;A-08017;0A003
4 ES020807762763;A-08018;0A004
5 ES040807762765;A-08019;0A005
6 ES080807762769;A-08020;0A006
7 ES070808652470;A-08021;0A007
8 ES050807762766;A-08022;0A008
9 ES090808652472;A-08023;0A009
10 ES060807762767;A-08024;0A010
11 ES000808652473;A-08025;0A011
12 ES010808652474;A-08026;0A012
13 ES020808652475;A-08027;0A013
14 ES030808652476;A-08028;0A014
15 ES040808652477;A-08029;0A015
16 ES050808652478;A-08030;0A016
17 ES060808652480;A-09001;0A017
18 ES070808652481;A-09002;0A018
19 ES080808652482;A-09003;0A019
20 ES060808652479;A-09004;0A020
21 ES040808652488;A-09005;0A021
22 ES000808652484;A-09006;0A022
23 ES020808652486;A-09007;0A023
24 ES050808636201;A-09032;0A024
25 ES040808636200;A-09033;0A025
26 ES060808636202;A-09034;0A026
27 ES080808636204;A-09035;0A027
28 ES000808636206;A-09036;0A028
29 ES070808636203;A-09037;0A029
30 ES090808636205;A-09038;0A030
31 ES010808636207;A-09039;0A031
32 ES020808636208;A-09040;0A032
33 ES030808636209;A-09041;0A033
34 ES030808636210;A-09042;0A034
35 ES050808636212;A-09043;0A035
36 ES040808636211;A-10001;0A036
37 ES060808636213;A-10002;0A037
38 ES070808636214;A-10003;0A038
39 ES080808636215;A-10004;0A039
40 ES090808636216;A-10005;0A040
41 ES000808636217;A-10006;0A041
42 ES010808636218;A-10007;0A042
43 ES020808636219;A-10008;0A043
44 ES030809118413;A-10009;0A044
45 ES040809118414;A-10010;0A045
46 ES050809118415;A-10011;0A046
47 ES060809118416;A-10012;0A047
48 ES070809118417;A-10013;0A048
49 ES080809118418;A-10014;0A049

> data2 <- read.csv("/Users/fernandoboris/Desktop/GenealogiaCompleta.csv", header=T)
> attach (data2)
> data2
ID.Padre.Madre.Sexo.Fecha.REGISTRO
1 2C-1A;0;0;2;18991230;ES041202489077
2 2C-2A;0;0;2;18991230;ES041202351963
3 2C-3A;0;0;2;18991230;ES011202351733
4 2C-4A;0;0;2;18991230;ES071202351831
5 2C-5A;0;0;2;18991230;ES071202007732
6 2C-6A;0;0;2;18991230;ES011202007714
7 2C-7A;0;0;2;18991230;ES051202431303
8 2G-22A;0;0;2;18991230;ES071004857272
9 2J-12A;0;0;2;18991230;ES060803205434
10 2S-1A;0;0;2;18991230;ES050801717607
11 2S-2A;0;0;2;18991230;ES051202393911
12 2S-3A;0;0;2;18991230;ES031202393839
13 2S-4A;0;0;2;18991230;ES041202393910
14 8M-10A;0;0;2;18991230;ES060702467225
15 8M-11A;0;0;2;18991230;ES060702786521
16 8M-12A;0;0;2;18991230;ES070701502941
17 8M-13A;0;0;2;18991230;ES070702467215
18 8M-1A;0;0;2;18991230;ES000702789819
19 8M-2A;0;0;2;18991230;ES010702786559
20 8M-5A;0;0;2;18991230;ES030702590159
21 8M-6A;0;0;2;18991230;ES040702789755
22 8M-8A;0;0;2;18991230;ES050702467213
23 8M-9A;0;0;2;18991230;ES050702789825
24 9H-10A;0;0;2;18991230;ES001003903147
25 9H-11A;0;0;2;18991230;ES031003903151
26 9H-12A;0;0;2;18991230;ES051003903153
27 9H-13A;0;0;2;18991230;ES091003903157
28 9H-14A;0;0;2;18991230;ES001003903158
29 9H-15A;0;0;2;18991230;ES031004895110
30 9H-16A;0;0;2;18991230;ES041004895111
31 9H-17A;0;0;2;18991230;ES051004895112
32 9H-18A;0;0;2;18991230;ES071004895114
33 9H-19A;0;0;2;18991230;ES081004895115
34 9H-1A;0;0;2;18991230;ES011003650202
35 9H-20A;0;0;2;18991230;ES091004895116
36 9H-21A;0;0;2;18991230;ES001004895117
37 9H-22A;0;0;2;18991230;ES011004895118
38 9H-23A;0;0;2;18991230;ES021004895119
39 9H-24A;0;0;2;18991230;ES021004895120
40 9H-25A;0;0;2;18991230;ES031004895121
41 9H-26A;0;0;2;18991230;ES041004895122
42 9H-27A;0;0;2;18991230;ES051004895123
43 9H-28A;0;0;2;18991230;ES061004895124
44 9H-29A;0;0;2;18991230;ES081004895126
45 9H-2A;0;0;2;18991230;ES071003650208
46 9H-30A;0;0;2;18991230;ES091004895127
47 9H-31A;0;0;2;18991230;ES011004895129
48 9H-32A;0;0;2;18991230;ES041004457111
49 9H-33A;0;0;2;18991230;ES011004895130
50 9H-35A;0;0;2;18991230;ES031004895132
51 9H-36A;0;0;2;18991230;ES041004895133
52 9H-37A;0;0;2;18991230;ES051004895134
53 9H-38A;0;0;2;18991230;ES041005095184
54 9H-39A;0;0;2;18991230;ES051005095185
55 9H-3A;0;0;2;18991230;ES081003650209
56 9H-40A;0;0;2;18991230;ES041004606798
57 9H-41A;0;0;2;18991230;ES051004606799
58 9H-42A;0;0;2;18991230;ES001005046854
59 9H-43A;0;0;2;18991230;ES041005046870
60 9H-44A;0;0;2;18991230;ES031005046879
61 9H-45A;0;0;2;18991230;ES041005046881
62 9H-46A;0;0;2;18991230;ES061005046883
63 9H-47A;0;0;2;18991230;ES041004457100
64 9H-48A;0;0;2;18991230;ES051004457101
65 9H-49A;0;0;2;18991230;ES061004457102
66 9H-4A;0;0;2;18991230;ES031003650215
67 9H-50A;0;0;2;18991230;ES071004457103
68 9H-51A;0;0;2;18991230;ES081004457104
69 9H-52A;0;0;2;18991230;ES091004457105
70 9H-53A;0;0;2;18991230;ES001004457106
71 9H-54A;0;0;2;18991230;ES011004457107
72 9H-55A;0;0;2;18991230;ES021004457108
73 9H-56A;0;0;2;18991230;ES031004457109
74 9H-57A;0;0;2;18991230;ES031004457110
75 9H-58A;0;0;2;18991230;ES051004457112
76 9H-59A;0;0;2;18991230;ES061004457113
77 9H-5A;0;0;2;18991230;ES041003650216
78 9H-60A;0;0;2;18991230;ES071004457114
79 9H-61A;0;0;2;18991230;ES081004457115
80 9H-62A;0;0;2;18991230;ES091004457116
81 9H-63A;0;0;2;18991230;ES001004457117
82 9H-64A;0;0;2;18991230;ES091003838864
83 9H-65A;0;0;2;18991230;ES001005046876
84 9H-6A;0;0;2;18991230;ES071003650219
85 9H-7A;0;0;2;18991230;ES081003650221
86 9H-8A;0;0;2;18991230;ES021003650225
87 9H-934A;0;0;2;18991230;ES021004895131
88 9H-9A;0;0;2;18991230;ES041003903141
89 A-12A;0;0;2;18991230;
90 A-13A;0;0;2;18991230;
91 A-5569F;0;0;2;18991230;
92 A-5570F;0;0;2;18991230;
93 A-5571F;0;0;2;18991230;
94 A-5572F;0;0;2;18991230;
95 A-5573F;0;0;2;18991230;
96 A-5574F;0;0;2;18991230
97 A-5575F;0;0;2;18991230
98 A-5576F;0;0;2;18991230
99 A-5577F;0;0;2;18991230
100 A-5578F;0;0;2;18991230
101 A-5579F;0;0;2;18991230
102 A-5580F;0;0;2;18991230
103 A-5581F;0;0;2;18991230
104 A-5582F;0;0;2;18991230
105 A-5583F;0;0;2;18991230
106 A-5584F;0;0;2;18991230
107 A-5585F;0;0;2;18991230
108 A-5586F;0;0;2;18991230
109 A-5587F;0;0;2;18991230
110 A-5588F;0;0;2;18991230
111 A-5589F;0;0;2;18991230
112 A-5590F;0;0;2;18991230
113 A-5591F;0;0;2;18991230
114 A-5592F;0;0;2;18991230
115 A-5593F;0;0;2;18991230
116 A-5594F;0;0;2;18991230
117 A-5595F;0;0;2;18991230
118 A-5596F;0;0;2;18991230
119 A-5597F;0;0;2;18991230
120 A-5598F;0;0;2;18991230
121 A-5599F;0;0;2;18991230
122 A-5600F;0;0;2;18991230
123 A-5601F;0;0;2;18991230
124 A-5602F;0;0;2;18991230
125 A-5603F;0;0;2;18991230
126 A-5604F;0;0;2;18991230
127 A-5605F;0;0;2;18991230
128 A-5606F;0;0;2;18991230
129 A-5607F;0;0;2;18991230
130 A-5608F;0;0;2;18991230
131 A-5609F;0;0;2;18991230
132 A-5610F;0;0;2;18991230
133 A-5611F;0;0;2;18991230
134 A-5612F;0;0;2;18991230
135 A-5613F;0;0;2;18991230
136 A-5614F;0;0;2;18991230
137 A-5615F;0;0;2;18991230
138 A-5616F;0;0;2;18991230
139 A-5617F;0;0;2;18991230
140 A-82019;0;0;2;18991230
141 A-87001;0;0;2;18991230
142 A-87002;0;0;2;18991230
143 R-88F;0;0;1;18991230
144 R-11F;0;0;2;18991230
145 R-73004;R-88F;R-11F;1;19730104
146 R-75010;R-88F;0;2;19750210
147 R-77056;R-73004;R-75010;1;19770413
148 A-83016;R-77056;A-5582F;1;19830221
149 A-87003;A-83016;A-5601F;2;18991230
150 A-87004;0;0;2;18991230
151 A-87005;0;0;2;18991230
152 A-87006;0;0;2;18991230
153 A-87007;0;0;2;18991230
154 A-87009;0;0;2;18991230
155 A-87011;0;0;2;18991230
156 A-87012;0;0;2;18991230
157 A-87013;0;0;2;18991230
158 A-87014;0;0;2;18991230
159 A-87016;0;0;2;18991230
160 A-87017;0;0;2;18991230;
161 A-87018;0;0;2;18991230;
162 A-87019;0;0;2;18991230;
163 A-87020;0;0;2;18991230;ES040805428044
164 A-87022;0;0;2;18991230;
165 A-87023;0;0;2;18991230;
166 A-87024;0;0;2;18991230;
167 AB-1A;0;0;2;18991230;ES081004107870
168 AB-2A;0;0;2;18991230;ES091004107871
169 AB-3A;0;0;2;18991230;ES001004107872
170 AB-4A;0;0;2;18991230;ES011003912296
171 AB-7042F;0;0;2;18991230;
172 AB-7043F;0;0;2;18991230;
173 AB-7045F;0;0;2;18991230;
174 AB-7046F;0;0;2;18991230;
175 AB-7047F;0;0;2;18991230;
176 AB-7048F;0;0;2;18991230
177 AB-7051F;0;0;2;18991230
178 AB-7052F;0;0;2;18991230
179 AB-7054F;0;0;2;18991230
180 AB-7055F;0;0;2;18991230
181 AB-7057F;0;0;2;18991230
182 AB-7059F;0;0;2;18991230
183 AB-7060F;0;0;2;18991230
184 AB-7061F;0;0;2;18991230
185 AB-7062F;0;0;2;18991230
186 AB-7063F;0;0;2;18991230
187 AB-7065F;0;0;2;18991230
188 AB-7069F;0;0;2;18991230
189 AB-7070F;0;0;2;18991230
190 AB-7072F;0;0;2;18991230
191 AB-7073F;0;0;2;18991230
192 AB-7074F;0;0;2;18991230
193 AB-7077F;0;0;2;18991230
194 AB-7078F;0;0;2;18991230
195 AB-7079F;0;0;2;18991230
196 AB-7080F;0;0;2;18991230
197 AB-7081F;0;0;2;18991230
198 AB-7083F;0;0;2;18991230
199 AB-7085F;0;0;2;18991230
200 AB-7086F;0;0;2;18991230

[ reached getOption("max.print") -- omitidas 104624 filas ]]
> ?merge
starting httpd help server ... done
> merge(data1,data2, by.x = "REGISTRO", by.y = "REGISTRO", all true)
Error: inesperado s'imbolo en "merge(data1,data2, by.x = "REGISTRO", by.y = "REGISTRO", all true"
> genocompl<-as.matrix(merge(data1,data2,by.x=REGISTRO(1),by.y=REGISTRO(6),all=FALSE))
Error en fix.by(by.x, x) : no se pudo encontrar la funci'on "REGISTRO"
> genocompl<-as.matrix(merge(data1,data2,by.x=REGISTRO[1],by.y=REGISTRO[6],all=FALSE))
Error en fix.by(by.x, x) : objeto 'REGISTRO' no encontrado
> genocompl<-as.matrix(merge(data1,data2,by.x=name1[1],by.y=name2[6],all=FALSE))
Error en fix.by(by.x, x) : objeto 'name1' no encontrado
> genocompl<-as.matrix(merge(data1,data2,by.x=[1],by.y=[6],all=FALSE))
Error: inesperado '[' en "genocompl<-as.matrix(merge(data1,data2,by.x=["
> genocompl<-as.matrix(merge(data1,data2,by.x=registro[1],by.y=registro[6],all=FALSE))
Error en fix.by(by.x, x) : objeto 'registro' no encontrado
> genocompl<-as.matrix(merge(data1,data2,by.x="registro[1]",by.y="registro[6]",all=FALSE))
Error en fix.by(by.x, x) : 'by' must specify valid column(s)
> genocompl<-as.matrix(merge(data1,data2,by.x="registro"[1],by.y="registro"[6],all=FALSE))
Error en fix.by(by.x, x) : 'by' must specify valid column(s)
> genocompl<-as.matrix(merge(data1,data2,by.x="registro"(1),by.y="registro"(2),all=FALSE))
Error en fix.by(by.x, x) : no se pudo encontrar la funci'on "registro"
> genocompl<-as.matrix(merge(data1,data2,by.x=var(1),by.y=var(2),all=FALSE))
Error en if (any(by < 0L) || any(by > nc)) stop("'by' must match numbers of columns") :
valor ausente donde TRUE/FALSE es necesario
> genocompl<-as.matrix(merge(data1,data2,by.x=var(1),by.y=var(2),all=T))
Error en if (any(by < 0L) || any(by > nc)) stop("'by' must match numbers of columns") :
valor ausente donde TRUE/FALSE es necesario
>
> name1=colREGISTRO(data1)
Error: no se pudo encontrar la funci'on "colREGISTRO"
> genocompl<-as.matrix(merge(data1,data2,by.x=c(1),by.y=c(6),all=T))
Error en fix.by(by.y, y) : 'by' must match numbers of columns
>
PRIMERO ESTAS LOS ARCHIVOS (el primero tiene 11500 datos y el Segundo 200000, los recorte) EL RESTO SON INTENTOS FALLIDOS DE QUERER COMBINARLOS: GRACIAS
In reply to Fernando Boris

Re: merge

by Manuel Muñoz Márquez -
Hola Fernando:

Por las preguntas que haces pareces que eres un usuario reciente de R. R es una herramienta fantástica que admite casi una infinidad de posibilidades.

Si estás empezando te aconsejo el uso de la interfaz gráfica R-Commander.

Si quieres alguna documentación tenemos a disposición de todos los interesados un libro libre Estadística básica con R y R-Commander.

Con respecto a la forma de pedir ayuda te sugeriría que incluyeras un título más descriptivo de tu pregunta y que no abrieras varios temas de discusión para el mismo asunto. Hay mucha gente dispuesta a ayudar, pero tienes que ayudarnos a ayudarte.

Saludos.
In reply to Manuel Muñoz Márquez

Re: merge

by Fernando Boris -
Si tal Cual, recien me pongo con R, y no tengo mucha idea de programación. Pero bueno, con la ayuda del manual y la vuestra supongo que podre ir aprendiendo a usarlo.
Muchas Gracias
In reply to Manuel Muñoz Márquez

Re: merge

by Fernando Boris -

En tu ejemplo el dataframe "a" va del 0 al 10 y en el b del 0 al 12, cuando combinas con merge te queda un "nuevo" dataframe del 0 al 10, es decir que pierdo dos datos (11 y 12) del dataframe "b". Como hago para que me haga un listado de los datos perdidos, es decir que no encontraron a x en comun.

ya tengo el libro estadistica basica con R y R comamder. Así que voy leyendo eso tambiém.

Otra consulta es como usar filtro por ejemplo quiero del "nuevo" dataframe los que tengan en la columna y valores mayores a 3.

Gracias.

In reply to Fernando Boris

Re: merge

by Manuel Muñoz Márquez -
Hola Fernando:

No entiendo tu interés por buscar los perdidos.

Si lo que quieres es tenerlos todos, independientemente de que estén en los dos o no puedes utilizar la opción ALL de merge para construir un data.frame con todos los datos y luego preguntar cuales faltan:

El ejmplo:
> a<-data.frame(x=1:5, y=(1:5)^2)
> a
x y
1 1 1
2 2 4
3 3 9
4 4 16
5 5 25
> b<-data.frame(x=0:6, z=(0:6)^3)
> b
x z
1 0 0
2 1 1
3 2 8
4 3 27
5 4 64
6 5 125
7 6 216
> m<-merge(a,b, by.x='x', all=TRUE)
> m
x y z
1 0 NA 0
2 1 1 1
3 2 4 8
4 3 9 27
5 4 16 64
6 5 25 125
7 6 NA 216
> which(is.na(m$y))
[1] 1 7

Es decir, los casos que faltan en la variable y (los que no están en ambos ficheros) son el 1 y el 7.

Con respecto a lo del filtro,
m[m$z>3,]
te devuelve las filas de m con valores de z mayores que 3.

Espero que te sirva, saludos.
In reply to Manuel Muñoz Márquez

Re: merge

by Fernando Boris -
Perfecto muchas gracias!! puede ser que cuando hay caracteres no va "is.na", o es lo mismo
Hago otra pregunta, R o C++, funcionan mejor con linux, mac o windows? creo que es la pregunta del millon!
Esta muy bueno el libro lo pude comprar en la casa del libro!
In reply to Fernando Boris

Re: merge

by Manuel Muñoz Márquez -
Hola Fernando:

La función is.na devuelve verdadero si el valor no existe (es decir, es NA) y falso en caso contrario. Por tanto, devuelve el número de las casillas vacías.

Si quieres más información sobre is.na puedes escribir
> ?is.na

> a<-data.frame(x=1:5, y=c(1,2,NA,3,NA))
> a
x y
1 1 1
2 2 2
3 3 NA
4 4 3
5 5 NA
> which(is.na(a$y))
[1] 3 5
> which(is.na(a[,2]))
[1] 3 5

Con respecto al funcionamiento bajo diferentes sistemas operativos, te diré que R funciona en cualquier sistema. El rendimiento depende de la gestión que haga el sistema de los recursos del equipo, por ejemplo, de memoria. La gestión de memoria se suele hacer de una manera mucho más eficaz en linux (o incluso en mac, que al fin y al cabo es en cierto modo linux/unix).

Saludos.
In reply to Manuel Muñoz Márquez

Re: merge

by Fernando Boris -

Perfecto, a sido un exito, me falta solo lo del filtro, que funciona lo que me pasaste si son solo numeros, pero no se como hacer si los datos son alfanumericos. tengo que eliminar los con valor 0, y con la formula que me pasaron los puedo identificar bien m[m$y==0,], pero no se como hacer la selección del resto de los datos. Ej

0

0

0

0

As34

R23

0

c34

Bueno, gracias desde ya!