将三个不同的列合并为R中的日期

时间:2014-10-13 07:19:25

标签: r

现在,我在R中的数据文件中有3个单独的列作为年,月和日。如何将这三列合并为一列并让R了解它是日期?

这就是现在的样子。

year   mon  day  gnp

1947    1   1   238.1   
1947    4   1   241.5   
1947    7   1   245.6   
1947    10  1   255.6   
1948    1   1   261.7   
1948    4   1   268.7

4 个答案:

答案 0 :(得分:11)

尝试:

  df$date <- as.Date(with(df, paste(year, mon, day,sep="-")), "%Y-%m-%d")
   df$date
  #[1] "1947-01-01" "1947-04-01" "1947-07-01" "1947-10-01" "1948-01-01"
  #[6] "1948-04-01"

答案 1 :(得分:5)

由于您的年,月和日类型为数字,因此最好使用的函数是lubridate包中的make_date函数。因此,tidyverse样式的解决方案是

library(tidyverse)
library(lubridate)

data %>%
  mutate(date = make_date(year, month, day))

答案 2 :(得分:2)

或者您可以使用lubridate包,这使得在R中处理日期和时间变得更加容易。

e.g。

df$date <- with(df, ymd(sprintf('%04d%02d%02d', year, mon, day)))
df$date
# [1] "1947-01-01 UTC" "1947-04-01 UTC" "1947-07-01 UTC" "1947-10-01 UTC"
# [5] "1948-01-01 UTC" "1948-04-01 UTC"

ymd函数采用表示年,月和日的字符串,可以是&#34; 19470101&#34;,&#34; 1947-01-01&#34;,&#34; 1947 / 01/01&#34;等。如果元素的排序方式不同,还有mdydmy。您也可以选择指定时区。

答案 3 :(得分:2)

还有一种使用lubridatemagrittr的更简单的解决方案:

df$date <- paste(df$year, df$mon, df$day, sep="-") %>% ymd() %>% as.Date()

即使我用单数位(即1)和双数位(即01)写的几天又几个月,这对我还是有用的。解析也是正确的。