Dado este marco de datos
row | time | name
-----------------
1 | 2 min| bob
2 | 7 min| john
3 | 1 hr 5 min| jess
Quiero procesar la columna de tiempo en una columna numérica que contenga el número de minutos. Tengo una función para procesar la cadena en un número, pero cuando trato de apply
mutar / transformar el marco de datos original, data.frame(apply(dataframe, 2, parse_str))
, falla o simplemente no funciona. Una vez que pueda aplicar la función de transformación, planeo convertir la columna de caracteres a numérica a través de df = as.numeric(as.character(dataframe$time))
, pero aún no la he probado.
¿Alguna idea sobre cómo puedo hacer que mi función de preprocesamiento mute / transforme / cree correctamente un nuevo marco de datos?
2 respuestas
Como han dicho los comentarios, es mejor hacerlo sin apply
:
> df <- data.frame(time=c('2 min', '7 min', '1 hr 5 min'), name = c('bob', 'john', 'jess'))
> df
time name
1 2 min bob
2 7 min john
3 1 hr 5 min jess
> df$time <- as.numeric(parse_str(df$time))
> df
time name
1 2 bob
2 7 john
3 65 jess
Si su función parse_str
devuelve numérico como dice, entonces ni siquiera necesita la llamada as.numeric
.
Aquí hay otra opción que usa lubridate y tidyverse, para cualquier persona que quiera reproducir sus resultados, pero no tiene tu función. Usando la fecha de la respuesta de C. Braun,
# install.packages(c("tidyverse", "lubridate"), dependencies = TRUE)
library(tidyverse)
library(lubridate)
df %>% mutate(
`t formated` = str_replace(time, "(^[0-9] min)", "0 hr \\1"),
`t hours minues` = hm(`t formated`),
`t duration` = as.duration(`t hours minues`),
`t numeric` = as.numeric(`t duration`, "minutes")
) %>% as_tibble()
#> # A tibble: 3 x 6
#> time name `t formated` `t hours minues` `t duration` `t numeric`
#> <fctr> <fctr> <chr> <S4: Period> <S4: Duration> <dbl>
#> 1 2 min bob 0 hr 2 min 2M 0S 120s (~2 minutes) 2
#> 2 7 min john 0 hr 7 min 7M 0S 420s (~7 minutes) 7
#> 3 1 hr 5 min jess 1 hr 5 min 1H 5M 0S 3900s (~1.08 hours) 65
Preguntas relacionadas
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.