如何从原始日期提取月份?

时间:2015-04-21 20:16:22

标签: r

我有以下示例数据:

  original_date    first_payment_date LTV DTI FICO
       01/2007            03/2007     56  37  734
       01/2007            04/2007     80  11  762
       01/2006            02/2007     80  28  656

我想从original_date中提取月份部分,但是当我使用months函数时,它会抛出一个错误,因为它正在查找类似'01 / 01/2007'的值。是否有可能获得月份而不将值转换为'01 / 01/2007'?

2 个答案:

答案 0 :(得分:1)

您可以使用separate中的tidyr功能将日期分为月份和年份列。然后,您可以使用mutate_each来获取monts的缩写而不是数字。使用month.abb获取缩写,或使用month.name获取全名。

require(tidyr)
require(dplyr)
df %>% 
  separate(original_date, c("original_month", "original_year"), sep = "/", convert = TRUE) %>%
  separate(first_payment_date, c("first_payment_month", "first_payment_year"), sep = "/", convert = TRUE) %>%
  mutate_each(funs(month.abb[.]), contains("_month"))
## original_month original_year first_payment_month first_payment_year LTV DTI FICO
## 1            Jan          2007                 Mar               2007  56  37  734
## 2            Jan          2007                 Apr               2007  80  11  762
## 3            Jan          2006                 Feb               2007  80  28  656

我使用的数据:

df <- data.frame(original_date = c("01/2007", "01/2007", "01/2006"), 
                 first_payment_date = c("03/2007", "04/2007", "02/2007"), 
                 LTV = c(56L, 80L, 80L), 
                 DTI = c(37L, 11L, 28L), 
                 FICO = c(734L, 762L, 656L), 
                 stringsAsFactors = FALSE)

答案 1 :(得分:0)

假设你在original_date中的前两个字符是你的月份。这应该只返回你的月份部分。

select LEFT(original_date,2) as original_date_month 
 from yourtable