R功能可修复自动格式化的数据

时间:2019-02-12 23:03:14

标签: r date

我目前正在分析包含计数数据的棒球数据集,但是,其中一些数据已自动格式化为日期。

我已经尝试过使用as.numeric,但这无济于事。我提供了以下数据的示例:

 Count(Factor) 0-0 0-1 0-2 1-Feb 1-Jan 1-Mar 2-Feb 2-Jan 2-Mar
               Feb-00 Jan-00 Mar-00

我想删除日期格式。例如,我想看到1月2日为1-2,1月1日为1-1,1-3月1日为1-3,Feb-00为2-0。

有人对此有任何建议吗?

1 个答案:

答案 0 :(得分:1)

您可以通过引用months.abb将缩写的月份替换为其相应的日历位置。下面,我使用Base R创建了一个常规函数。

## function to apply 
month_num <- function(x){
  if (! grepl('\\w{3}', x))
    return(x)
  gsub('/?\\w{3}', as.character(match(regmatches(x, regexpr('(\\w{3})', x)), month.abb)), x)
}

## vector
strings <- c( '0-0', '0-1' ,'0-2', '1-Feb', '1-Jan', '1-Mar', '2-Feb', '2-Jan', '2-Mar', 'Feb-00', '/Jan-00', 'Mar-00')
sapply(strings, month_num, USE.NAMES = FALSE)
#>  [1] "0-0"  "0-1"  "0-2"  "1-2"  "1-1"  "1-3"  "2-2"  "2-1"  "2-3"  "2-00"
#> [11] "1-00" "3-00"

## data.frame or matrix
tmp <- data.frame(
  strings = c( '0-0', '0-1' ,'0-2', '1-Feb', '1-Jan', '1-Mar', '2-Feb', '2-Jan', '2-Mar', 'Feb-00', '/Jan-00', 'Mar-00')
)
tmp$strings <- apply(tmp, 1, month_num)
tmp
#>    strings
#> 1      0-0
#> 2      0-1
#> 3      0-2
#> 4      1-2
#> 5      1-1
#> 6      1-3
#> 7      2-2
#> 8      2-1
#> 9      2-3
#> 10    2-00
#> 11    1-00
#> 12    3-00

## list
strings <- list( '0-0', '0-1' ,'0-2', '1-Feb', '1-Jan', '1-Mar', '2-Feb', '2-Jan', '2-Mar', 'Feb-00', '/Jan-00', 'Mar-00')
strings <- lapply(strings, month_num) 
tail(strings)
#> [[1]]
#> [1] "2-2"
#> 
#> [[2]]
#> [1] "2-1"
#> 
#> [[3]]
#> [1] "2-3"
#> 
#> [[4]]
#> [1] "2-00"
#> 
#> [[5]]
#> [1] "1-00"
#> 
#> [[6]]
#> [1] "3-00"

reprex package(v0.2.1)于2019-02-12创建