Foro de debate

Como crear un ciclo for para datos pareados

Re: Como crear un ciclo for para datos pareados

de Manuel Muñoz Márquez -
Número de respuestas: 5

Buenas:

Este código falla debido a que en la primera pasada del bucle, cap_as no está definido.

Prueba con esto

if (i==1) cap_as = M_i else cap_as=cbind(cap_as,M_i)

Un saludo.

En respuesta a Manuel Muñoz Márquez

Re: Como crear un ciclo for para datos pareados

de Daniela Estay -

Muchas gracias, funcionó, porfis, una ultima dudita. Arme un vector de pólizas que necesito  extraer de la base original (al cual llamo "polizas"), pero al querer extraer estos valores mediante el código "muestra_1=datos[datos$Poliza==polizas,]", R me arroja este error: Warning message:In datos$Poliza == polizas :  longitud de objeto mayor no es múltiplo de la longitud de uno menor. No se porque no me funciona, solo quiero extraer de la base datos las pólizas indicadas en el vector pólizas. Este es el codigo que estoy utilizando:

a=c(13,14,36,38,40,41,45,46,47,48,51,53,54,55,95,99,213,214,215,248,262,267,270,289,290,291,292,293,

294,297,310,326,327,330,332,336,360,361,362,402,404,500,600,650,700,800,801)

b=c(2643,116,318,69,121,118,981,172,74,133,10,4,11,2,1,2,1,1061,4,356,1,56,429,

102,528,482,79,728,709,29,114,25,9,53,8,590,600,60,13,520,56,159,2586,2459,2315,

1014,1437)

for(i in 1:47)

{A_i=POL[POL$Codigo_Producto==a[i],]

assign(paste0('A_', a[i]), A_i)

B_i=A_i[sample(nrow(A_i),size=b[i]),]

assign(paste0('B_', a[i]), B_i)

if (i==1)

muestra_cap_a=B_i

else

muestra_cap_a=rbind(muestra_cap_a,B_i)}

polizas=as.numeric(muestra_cap_a$Poliza)

muestra_1=datos[datos$Poliza==polizas,]


En respuesta a Daniela Estay

Re: Como crear un ciclo for para datos pareados

de Manuel Muñoz Márquez -
Buenas: No es un error es un aviso. Dado que datos$Poliza y polizas son dos vectores lo que se hace es comparar elemento a elemento. Creo que lo que quieres es coger los datos cuyo valor en datos$Poliza coincida con algún valor en polizas, en ese caso tu línea debería ser: muestra_1=datos[datos$Poliza %in% polizas,] Un saludo.
En respuesta a Manuel Muñoz Márquez

Re: Como crear un ciclo for para datos pareados

de Daniela Estay -

Muchas gracias profesor, con lo que usted me dijo funcionó perfecto. Un consulta, porque no sirve colocándole que extraiga los que sean igual al vector póliza como lo tenía, si finalmente lo que quería era tomar todos los que coincidían con ese valor. ¿Por que ahí no funciona el ==?

En respuesta a Daniela Estay

Re: Como crear un ciclo for para datos pareados

de Manuel Muñoz Márquez -

Buenas:

Cuando se comparan dos vectores la comparación se hace elemento a elemento. Como puedes comprobar en

> set.seed(0)
> x <- sample.int(2, 5, replace=TRUE)
> x
[1] 2 1 1 2 2
> y <- sample.int(2, 5, replace=TRUE)
> y
[1] 1 2 2 2 2
> x == y
[1] FALSE FALSE FALSE  TRUE  TRUE

Cuando un vector es de longitud inferior al otro se hace un reciclado, es decir, el más corto se repite tantas veces como sea necesario para compararlo con el grande, si la longitud del más corto no es un múltiplo de la del pequeño hace la comparación pero da el aviso pues esto no es lo habitual,

> z = c(1,2)
> z
[1] 1 2
> x == z
[1] FALSE FALSE  TRUE  TRUE FALSE
Warning message:
In x == z :
  longitud de objeto mayor no es múltiplo de la longitud de uno menor

Un saludo