Tengo el siguiente conjunto de datos que describe el total de horas de capacitación completadas cada semana, con referencia a la fecha en que terminó la semana. Las semanas son de lunes a domingo, por lo que las fechas WeekEnding
tienen 7 días de diferencia.
df<- structure(list(WeekEnding = c("2020-03-08", "2020-03-15", "2020-03-22",
"2020-03-29", "2020-04-05", "2020-04-12", "2020-04-19", "2020-04-26"
), TotalTraining.hrs = c(14.119574637, 15.560762437, 14.160377084,
16.968056203, 14.617250934, 10.865982397, 14.619121779, 13.135129677
)), row.names = c(NA, 8L), class = c("grouped_df", "tbl_df",
"tbl", "data.frame"))
Estos datos se actualizarán todas las semanas. Me gustaría poder comparar las horas totales de entrenamiento de la semana más reciente con la semana anterior. Puedo obtener fácilmente el total de horas de entrenamiento para la semana más reciente (es decir, la semana máxima).
df$TotalTraining.hrs[df$WeekEnding == max(df$WeekEnding)]
[1] 13.13513
Y puedo ingresar manualmente la fecha para obtener la semana anterior
> df$TotalTraining.hrs[df$WeekEnding == "2020-04-19"]
[1] 14.61912
Sin embargo, como los datos se actualizarán regularmente, me gustaría poder hacer referencia a la semana anterior de la semana más reciente sin tener que ingresar manualmente la fecha.
> df$TotalTraining.hrs[df$WeekEnding == (max(df$WeekEnding)- 7)]
Error in max(df$WeekEnding) - 7 : non-numeric argument to binary operator
Hay una solución para esto ? Gracias
3 respuestas
Si sus datos ya están ordenados, puede seleccionar las dos últimas filas y restar usando diff
.
diff(tail(df, 2)$TotalTraining.hrs)
#[1] -1.483992
Si no está ordenada, puede ordenarlas primero.
df$WeekEnding <- as.Date(df$WeekEnding)
df <- df[order(df$WeekEnding),]
Para calcular el cambio porcentual podemos hacer:
x <- tail(f, 2)$TotalTraining.hrs
diff(x)/x[1] * 100
#[1] -10.15103
Si se ordena, el último es
df[length(df),]
Y la anterior
df[length(df)-1,]
Puede usar which.max
, que indica el índice del valor max
y restar 1
de él:
diff <- df$TotalTraining.hrs[df$WeekEnding == max(df$WeekEnding)] - df$TotalTraining.hrs[which.max(df$WeekEnding) -1]
Resultado:
diff
[1] -1.483992
(Esta solución requiere que df
se ordene por WeekEnding
).
Nuevas preguntas
r
R es un entorno de software y lenguaje de programación de código abierto y gratuito para computación estadística, bioinformática, visualización y computación en general. Proporcione ejemplos mínimos y reproducibles junto con el resultado deseado. Use dput () para los datos y especifique todos los paquetes no base con llamadas a library (). No incruste imágenes para datos o código, use bloques de código con sangría en su lugar. Para preguntas relacionadas con estadísticas, use https://stats.stackexchange.com.