r - 将儒略日转换为 mm/dd 并从 r 中数据框中的另一列添加年份

标签 r date julian-date

我有一个没有年份的 JulianDay 列 (dat$BeginJD) 和一个年份列 (dat$Year)。我需要一个包含 mm/dd/yyyy 的列,从两列 (dat$BeginDate) 中提取。

data.frame 看起来像这样:

> head(dat); tail(dat)
Year BeginJD BeginDate
 1976       3        NA
 1977      NA        NA
 1978       4        NA
 1979       2        NA
 1980      15        NA
 1981      NA        NA
 2010      15        NA
 2011     343        NA
 2012       7        NA
 2013     354        NA
 2014     360        NA
 2015     337        NA

我希望 data.frame 看起来像这样:

> head(dat); tail(dat)
Year BeginJD BeginDate
 1976       3        1/3/1976
 1977      NA        NA
 1978       4        1/4/1978
 1979       2        1/2/1979
 1980      15        1/15/1980
 1981      NA        NA
 2010      15        1/15/2010
 2011     343        12/9/2011
 2012       7        1/7/2012
 2013     354        12/20/2013
 2014     360        12/26/2014
 2015     337        12/3/2015

我尝试过使用 lubridatechron 包编写代码,但没有成功。

使用 R 3.2.1 和 RStudio 0.99.467

最佳答案

可以向 "Date" 类或 "chron" 变量添加天数,这样就可以了——使用 format(as.Date(paste0(Year , "-1-1")) + BeginJD - 1), "%m/%d/%Y") 如果您希望结果为字符串而不是 "Date,则对其进行格式化" 类对象;但是,通常存储 "Date" 类对象,而不是格式化字符串。

transform(ser, BeginDate = as.Date(paste0(Year, "-1-1")) + BeginJD - 1)

给予:

   Year BeginJD  BeginDate
1  1976       3 1976-01-03
2  1977      NA       <NA>
3  1978       4 1978-01-04
4  1979       2 1979-01-02
5  1980      15 1980-01-15
6  1981      NA       <NA>
7  2010      15 2010-01-15
8  2011     343 2011-12-09
9  2012       7 2012-01-07
10 2013     354 2013-12-20
11 2014     360 2014-12-26
12 2015     337 2015-12-03

这样做:

library(chron)
transform(ser, BeginDate = as.chron(paste0(Year, "-1-1")) + BeginJD - 1)

给予:

   Year BeginJD BeginDate
1  1976       3  01/03/76
2  1977      NA      <NA>
3  1978       4  01/04/78
4  1979       2  01/02/79
5  1980      15  01/15/80
6  1981      NA      <NA>
7  2010      15  01/15/10
8  2011     343  12/09/11
9  2012       7  01/07/12
10 2013     354  12/20/13
11 2014     360  12/26/14
12 2015     337  12/03/15

注意:这是以可重现形式使用的ser。 (请确保将来您的问题可重复提供输入。)

Lines <- "Year BeginJD BeginDate
 1976       3        NA
 1977      NA        NA
 1978       4        NA
 1979       2        NA
 1980      15        NA
 1981      NA        NA
 2010      15        NA
 2011     343        NA
 2012       7        NA
 2013     354        NA
 2014     360        NA
 2015     337        NA"

ser <- read.table(text = Lines, header = TRUE)

关于r - 将儒略日转换为 mm/dd 并从 r 中数据框中的另一列添加年份,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33876823/

相关文章:

r - 在 R 中的列表元素上应用 "dim"函数

r - 如何计算由包含x,y的矩阵定义的两点之间的欧几里得距离?

r Shiny 的 Action 按钮和数据表输出

r - 保留具有不同名称的重复列。右

php - MySQL date_format 和日期范围

python - 将儒略日转换为日期

java - 为什么 GregorianCalendar.getInstance 包含儒略历类型的 calsys 和 cdate

date - pyspark-生成日期序列

mysql - Sql 前一天拉取(周一除外)周五至周日拉取

sql - 甲骨文朱利安一天