现在,我在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
答案 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;等。如果元素的排序方式不同,还有mdy
和dmy
。您也可以选择指定时区。
答案 3 :(得分:2)
还有一种使用lubridate
和magrittr
的更简单的解决方案:
df$date <- paste(df$year, df$mon, df$day, sep="-") %>% ymd() %>% as.Date()
即使我用单数位(即1)和双数位(即01)写的几天又几个月,这对我还是有用的。解析也是正确的。