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