将儒略日转换为 mm/dd 并从 r 中数据框中的另一列添加年份
Convert julian day to mm/dd and add year from another column in dataframe in r
我有一个没有年份的 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
我试过使用 lubridate
和 chron
包编写代码,但没有成功。
使用 R 3.2.1 和 RStudio 0.99.467
可以将天数添加到 "Date"
class 或 "chron"
变量中,这样就可以了——如果您希望结果为字符,请使用 format(as.Date(paste0(Year, "-1-1")) + BeginJD - 1), "%m/%d/%Y")
对其进行格式化字符串而不是 "Date"
class 对象;但是,通常一个存储 "Date"
class 对象,而不是格式化字符串。
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)
我有一个没有年份的 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
我试过使用 lubridate
和 chron
包编写代码,但没有成功。
使用 R 3.2.1 和 RStudio 0.99.467
可以将天数添加到 "Date"
class 或 "chron"
变量中,这样就可以了——如果您希望结果为字符,请使用 format(as.Date(paste0(Year, "-1-1")) + BeginJD - 1), "%m/%d/%Y")
对其进行格式化字符串而不是 "Date"
class 对象;但是,通常一个存储 "Date"
class 对象,而不是格式化字符串。
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)