<div dir="ltr"><div class="gmail_default" style="font-family:verdana,sans-serif">Hola,</div><div class="gmail_default" style="font-family:verdana,sans-serif"><br></div><div class="gmail_default" style="font-family:verdana,sans-serif">Acabo de correr el mismo código que te pasé con la modificación de nombres de columnas...y me funciona...</div><div class="gmail_default" style="font-family:verdana,sans-serif">Vaya no me genera errores...(lo he ejecutado sobre los datos "Sample").</div><div class="gmail_default" style="font-family:verdana,sans-serif"><br></div><div class="gmail_default" style="font-family:verdana,sans-serif">#-----------</div><div class="gmail_default"><div class="gmail_default"><span style="font-family:verdana,sans-serif">names(Sample) <- c('id', 'pubdate', 'txt', 'votes')</span><br></div><div class="gmail_default"><font face="verdana, sans-serif">datIn <- Sample</font></div><div class="gmail_default"><font face="verdana, sans-serif"><br></font></div><div class="gmail_default"><font face="verdana, sans-serif">library(data.table)</font></div><div class="gmail_default"><font face="verdana, sans-serif">library(lubridate)</font></div><div class="gmail_default"><font face="verdana, sans-serif">dt <- as.data.table(datIn)</font></div><div class="gmail_default"><font face="verdana, sans-serif">dt[ , miju := julian.Date(ymd(pubdate))]</font></div><div class="gmail_default"><font face="verdana, sans-serif"><br></font></div><div class="gmail_default"><font face="verdana, sans-serif"># Doy un primer orden sin tener en cuenta las fechas iguales</font></div><div class="gmail_default"><font face="verdana, sans-serif">setorder(dt, id, -votes, miju)</font></div><div class="gmail_default"><font face="verdana, sans-serif">dt[, mior := seq_len(.N), by=id]</font></div><div class="gmail_default"><font face="verdana, sans-serif"><br></font></div><div class="gmail_default"><font face="verdana, sans-serif"># Para las fechas iguales</font></div><div class="gmail_default"><font face="verdana, sans-serif">df <- as.data.frame(dt)</font></div><div class="gmail_default"><font face="verdana, sans-serif">for(i in 1:(nrow(df)-1)) {</font></div><div class="gmail_default"><font face="verdana, sans-serif"> if(df$miju[i] == df$miju[i+1]) {</font></div><div class="gmail_default"><font face="verdana, sans-serif"> df$mior[i+1] <- df$mior[i]</font></div><div class="gmail_default"><font face="verdana, sans-serif"> } else next</font></div><div class="gmail_default"><font face="verdana, sans-serif">}</font></div><div class="gmail_default"><font face="verdana, sans-serif"><br></font></div><div class="gmail_default"><font face="verdana, sans-serif">head(df[, c(1,2,4,5,6)])</font></div><div style="font-family:verdana,sans-serif">#-----------<br></div><div style="font-family:verdana,sans-serif"><br></div><div style="font-family:verdana,sans-serif">Please ejecútalo y comprueba que la lógica se cumple...</div><div style="font-family:verdana,sans-serif">La columna a mirar es "mior".</div><div style="font-family:verdana,sans-serif"><br></div><div style="font-family:verdana,sans-serif">Gracias,</div><div style="font-family:verdana,sans-serif">Carlos.</div></div></div><div class="gmail_extra"><br><div class="gmail_quote">El 4 de abril de 2017, 17:12, <span dir="ltr"><<a href="mailto:miriam.alzate@unavarra.es" target="_blank">miriam.alzate@unavarra.es</a>></span> escribió:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Buenas Carlos,<br>
<br>
No me funciona...me sigue dando error. Te paso mejor una pequeña muestra<br>
del archivo de R para que veas si hay algún error.<br>
<br>
<br>
Muchas gracias,<br>
<br>
Miriam<br>
<div class="HOEnZb"><div class="h5"><br>
El Lun, 3 de Abril de 2017, 22:08, Carlos Ortega escribió:<br>
> Hola Miriam,<br>
><br>
> Utiliza el paquete, "lubridate".<br>
><br>
> y haz algo como esto, suponiendo que tu data.frame se llama "mydf"..<br>
><br>
> #----------<br>
> library(lubridate)<br>
> mydf$fecha <- ymd(mydf$fecha_sin_formato)<br>
> #----------<br>
><br>
> Ya me cuentas si funciona,<br>
> Carlos.<br>
><br>
><br>
><br>
><br>
><br>
> El 3 de abril de 2017, 20:08, <<a href="mailto:miriam.alzate@unavarra.es">miriam.alzate@unavarra.es</a>> escribió:<br>
><br>
>> Muchas gracias por la respuesta Carlos. Estoy haciéndolo y me da el<br>
>> siguiente error al crear la variable miju:<br>
>><br>
>> "Warning message: All formats failed to parse. No formats found"<br>
>><br>
>> Estoy mirando el formato de la variable fecha y, aunque al importar la<br>
>> base de datos a R, seleccioné el formato fecha, veo que al poner el<br>
>> cursor<br>
>> sobre la variable me pone "Unknown", por lo que quizá no esté el formato<br>
>> fecha.<br>
>><br>
>> Las fechas me aparecen de la siguiente forma: 2013-07-13 (año-mes-día).<br>
>> ¿Cómo debería darle el formato correcto para que me deje hacer el<br>
>> comando<br>
>> miju?<br>
>><br>
>> Muchas gracias y un saludo.<br>
>><br>
>><br>
>> El Sab, 1 de Abril de 2017, 17:21, Carlos Ortega escribió:<br>
>> > Hola Miriam,<br>
>> ><br>
>> > Esta es una forma de hacerlo:<br>
>> ><br>
>> > #---------------<br>
>> ><br>
>> > datIn <- read.table("Orden_variable.<wbr>csv", sep=";", header = TRUE)<br>
>> > names(datIn) <- c('v1','v2','v3','v4','v5')<br>
>> ><br>
>> > library(data.table)<br>
>> > library(lubridate)<br>
>> > dt <- as.data.table(datIn)<br>
>> > dt[ , miju := julian.Date(dmy(v4))]<br>
>> ><br>
>> > # Doy un primer orden sin tener en cuenta las fechas iguales<br>
>> > setorder(dt, v2, -v3, miju)<br>
>> > dt[, mior := seq_len(.N), by=v2]<br>
>> ><br>
>> > # Para las fechas iguales<br>
>> > df <- as.data.frame(dt)<br>
>> > for(i in 1:(nrow(df)-1)) {<br>
>> > if(df$miju[i] == df$miju[i+1]) {<br>
>> > df$mior[i+1] <- df$mior[i]<br>
>> > } else next<br>
>> > }<br>
>> ><br>
>> > #---------------<br>
>> ><br>
>> > Saludos,<br>
>> > Carlos.<br>
>> ><br>
>> > El 30 de marzo de 2017, 18:37, <<a href="mailto:miriam.alzate@unavarra.es">miriam.alzate@unavarra.es</a>> escribió:<br>
>> ><br>
>> >> Hola Carlos,<br>
>> >><br>
>> >> Sería porque es la 4ª review en esa fecha (hay 3 observaciones<br>
>> >> anteriores).<br>
>> >> En el caso del "P402", las dos observaciones del mismo día con el<br>
>> mismo<br>
>> >> número de votos(ordenado de mayor a menor), reciben el orden 1, pero<br>
>> la<br>
>> >> siguiente más nueva recibe el 3 porque hay dos observaciones<br>
>> anteriores.<br>
>> >> En realidad yo no tengo la variable Numero.Review en la base de datos<br>
>> >> sino<br>
>> >> Review.Content.<br>
>> >><br>
>> >> Envio el archivo excel con el ejemplo. He llamado "Orden.deseado" a<br>
>> la<br>
>> >> variable que quiero construir de forma automática. La tabla que<br>
>> adjunto<br>
>> >> estaría ya ordenada 1 por Id.Producto, 2º por Numero.Votos y 3º por<br>
>> >> Fecha.Publicación.<br>
>> >><br>
>> >> Muchas gracias y un saludo<br>
>> >><br>
>> >> Miriam<br>
>> >><br>
>> >><br>
>> >><br>
>> >><br>
>> >> El Jue, 23 de Marzo de 2017, 23:36, Carlos Ortega escribió:<br>
>> >> > Hola Miriam,<br>
>> >> ><br>
>> >> > ¿Por qué la última de "P401" tiene Orden = 4?..¿Por que su úiltimo<br>
>> >> > "Numero.Review" es 4?.<br>
>> >> > Si esa es la lógica, que es la que has descrito, porqué en la P402<br>
>> la<br>
>> >> > última es de "Orden" = 3 y no = 7? Que es su último<br>
>> Numero.Review?...<br>
>> >> ><br>
>> >> > Tampoco pienses que con un "comando" se hace esto... sí con una<br>
>> >> lógica,<br>
>> >> > varias instrucciones seguidas. Si hay suerte se podrá arreglar con<br>
>> una<br>
>> >> > función sencilla...<br>
>> >> ><br>
>> >> > Es una extensión de lo último que te envié. En ese otro caso, se<br>
>> >> ordenaba<br>
>> >> > por una sola columna, ahora hay que ordenar por varias columnas,<br>
>> esto<br>
>> >> es<br>
>> >> > fácil y luego para encontrar el número de orden haría la misma<br>
>> lógica<br>
>> >> que<br>
>> >> > la otra vez... Bueno, confirma lo que preguntas y veremos si esas<br>
>> >> ideas<br>
>> >> > funcionan. También si los datos los adjuntas en un fichero .txt o<br>
>> >> .csv...<br>
>> >> > mejor.<br>
>> >> ><br>
>> >> > Gracias,<br>
>> >> > Carlos.<br>
>> >> ><br>
>> >> > El 23 de marzo de 2017, 3:23, <<a href="mailto:miriam.alzate@unavarra.es">miriam.alzate@unavarra.es</a>> escribió:<br>
>> >> ><br>
>> >> >><br>
>> >> >> Quiero crear una nueva variable "Orden" que me ordene el<br>
>> >> >> "Numbero.Review",<br>
>> >> >> 1º por "Id.Producto", 2º por "Número.Votos" de más a menos y 3º<br>
>> por<br>
>> >> >> Fecha.publicación.Review" de la más nueva a la más antigua. Como<br>
>> hay<br>
>> >> >> observaciones con el mismo número de votos y en la misma fecha,<br>
>> >> quiero<br>
>> >> >> que<br>
>> >> >> tengan el mismo número de orden. Pero la siguiente observación de<br>
>> la<br>
>> >> >> siguiente fecha tiene que tener un orden=1+numero de reviews de<br>
>> los<br>
>> >> días<br>
>> >> >> previos.<br>
>> >> >> En mi base de datos tengo 66.000 observaciones(reviews) que<br>
>> >> pertenecen a<br>
>> >> >> 137 productos diferentes. Cada día tengo diferentes observaciones<br>
>> de<br>
>> >> los<br>
>> >> >> mismos productos, por lo que el producto aparece tantas veces como<br>
>> >> >> reviews<br>
>> >> >> haya prublicadas. Los datos son como el ejemplo que he mandado<br>
>> >> >> anteriormente. La variable que quiero crear es a la que llamo<br>
>> >> "Orden",<br>
>> >> >> el<br>
>> >> >> resto las tengo. Esta variable orden va en cada producto del 1 al<br>
>> >> número<br>
>> >> >> de reviews que haya ( por ejemplo en el P401 4). Para el P402,<br>
>> vuelve<br>
>> >> a<br>
>> >> >> empezar del 1 al número de reviews de ese producto.<br>
>> >> >><br>
>> >> >> Lo que necesito es sacar esta variable "Orden de forma<br>
>> automatica".<br>
>> >> No<br>
>> >> >> sé<br>
>> >> >> que comando utilizar.<br>
>> >> >><br>
>> >> >> Numero.Review Id.Producto Número.Votos<br>
>> Fecha.publicación.Review<br>
>> >> >> Orden<br>
>> >> >><br>
>> >> >> 1 P401 42 2017-02-25<br>
>> >> >> 1<br>
>> >> >><br>
>> >> >> 2 P401 5 2017-01-06<br>
>> >> >> 2<br>
>> >> >><br>
>> >> >> 3 P401 5 2017-01-06<br>
>> >> >> 2<br>
>> >> >><br>
>> >> >> 4 P401 0 2016-12-30<br>
>> >> >> 4<br>
>> >> >><br>
>> >> >> 5 P402 3 2017-03-15<br>
>> >> >> 1<br>
>> >> >><br>
>> >> >> 6 P402 3 2017-03-15<br>
>> >> >> 1<br>
>> >> >><br>
>> >> >> 7 P402 0 2016-12-31<br>
>> >> >> 3<br>
>> >> >><br>
>> >> >> 8 P403 12 2016-11-15<br>
>> >> >> 1<br>
>> >> >><br>
>> >> >> 9 P403 12 2016-11-10<br>
>> >> >> 2<br>
>> >> >><br>
>> >> >> 10 P403 15 2016-10-25<br>
>> >> >> 3<br>
>> >> >><br>
>> >> >> 11 P403 15 2016-10-25<br>
>> >> >> 3<br>
>> >> >><br>
>> >> >> 12 P403 2 2016-09-30<br>
>> >> >> 5<br>
>> >> >><br>
>> >> >><br>
>> >> >><br>
>> >> >><br>
>> >> >><br>
>> >> >><br>
>> >> >><br>
>> >> ><br>
>> >> ><br>
>> >> > --<br>
>> >> > Saludos,<br>
>> >> > Carlos Ortega<br>
>> >> > <a href="http://www.qualityexcellence.es" rel="noreferrer" target="_blank">www.qualityexcellence.es</a><br>
>> >> ><br>
>> >><br>
>> ><br>
>> ><br>
>> ><br>
>> > --<br>
>> > Saludos,<br>
>> > Carlos Ortega<br>
>> > <a href="http://www.qualityexcellence.es" rel="noreferrer" target="_blank">www.qualityexcellence.es</a><br>
>> ><br>
>><br>
>><br>
>><br>
><br>
><br>
> --<br>
> Saludos,<br>
> Carlos Ortega<br>
> <a href="http://www.qualityexcellence.es" rel="noreferrer" target="_blank">www.qualityexcellence.es</a><br>
><br>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature" data-smartmail="gmail_signature"><span style="font-family:verdana,sans-serif">Saludos,</span><br style="font-family:verdana,sans-serif">
<span style="font-family:verdana,sans-serif">Carlos Ortega</span><br style="font-family:verdana,sans-serif">
<span style="font-family:verdana,sans-serif"><a href="http://www.qualityexcellence.es" target="_blank">www.qualityexcellence.es</a></span></div>
</div>