![](/img/trans.png)
[英]How to aggregate Character Data of a data frame based on different column in r
[英]How to preprocess a character column in an R data frame
鑒於此數據框架
row | time | name
-----------------
1 | 2 min| bob
2 | 7 min| john
3 | 1 hr 5 min| jess
我想將時間列處理為包含分鍾數的數字列。 我有一個函數將字符串處理成一個數字,但是當我嘗試apply
它應用於mutate / transform原始數據框架data.frame(apply(dataframe, 2, parse_str))
,它會崩潰或者只是不起作用。 一旦我可以應用轉換函數,我計划通過df = as.numeric(as.character(dataframe$time))
將字符列轉換為數字,但尚未測試它。
有關如何使我的預處理功能正確改變/轉換/創建新數據幀的任何想法?
正如評論所說,最好不要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
如果您的parse_str
函數按照您的說法返回數字,那么您甚至不需要as.numeric
調用。
這是使用lubridate和tidyverse的另一種選擇,適用於任何想要重現結果但沒有功能的人。 使用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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.