簡體   English   中英

如何預處理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調用。

這是使用的另一種選擇,適用於任何想要重現結果但沒有功能的人。 使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM