我想將一列日期轉換爲R中的日期對象,但我似乎無法得到所需的結果。這些人的出生日期在1970年1月1日之前,因此當我使用as.Date
時,R將例如1/12/54的日期轉換爲2054-01-12。我該如何解決這個問題?非常感謝。1970年1月1日之前轉換日期在R
回答
如果一切都在20世紀,那麼它就是一條線 - 只是在開始時用一個兩位數的年份格式化它,然後在前面打一個19,然後轉換爲日期。再次。男人這會看起來很酷有些%>%的東西:
s = c("1/12/54","1/12/74")
as.Date(format(as.Date(s,format="%d/%m/%y"), "19%y%m%d"), "%Y%m%d")
# [1] "1954-12-01" "1974-12-01"
如果從「69」年的「99」是1800年,那麼這裏就是另外一個班輪:
library(dplyr) # for pipe operator:
s %>% as.Date(format="%d/%m/%y") %>%
format("%y%m%d") %>%
(function(d){
paste0(ifelse(d>700101,"18","19"),d)
}) %>%
as.Date("%Y%m%d")
## [1] "1954-12-01" "1874-12-01"
注意不徹底的測試,因此可能是一些錯誤的錯誤或我混合了幾個月和幾天,因爲你需要是ISO8601 Compliant
Upvote只是爲了''%>%'的創造性破壞。 –
這正是我所需要的。 – user122514
我會做:
library(lubridate)
x <- as.Date("1/12/54", format = "%m/%d/%y")
year(x) <- 1900 + year(x) %% 100
> x
[1] "1954-01-12"
在年份=「70」後失敗。 OP的狀態出生在1970-01-01之前,所以「1/12/74」應該是** 1874 ** – Spacedman
很明顯,將這個應用於矢量將需要更強大的解決方案,但我非常確定OP可以編寫一個' ifelse'或兩個使用我提供的工具到達那裏! –
感謝您的回覆。 :-) – user122514
無需附加軟件包,基礎R是罰款。但是,你需要指定世紀:
R> as.Date("1954-01-12")
[1] "1954-01-12"
R>
如果你需要非默認格式,只需指定他們:
R> as.Date("19540112", "%Y%m%d")
[1] "1954-01-12"
R>
編輯:如果你的數據,其實就是在使用%y%
格式,和你碰巧做出政策決定,即19世紀的需要 ,這裏是這樣做的一個基礎R方式:
R> d <- as.Date("540112", "%y%m%d")
R> dlt <- as.POSIXlt(d)
R> dlt$year <- dlt$year - 100
R> as.Date(dlt)
[1] "1954-01-12"
R>
我認爲這個答案對OP沒有幫助,因爲你沒有解釋你如何「指定」世紀,也就是說,你如何從字符串** vector **得到格式爲「%m /%d /%y 「到」%m /%d /%Y「。我很確定OP知道'as.Date(「1954-01-12」)會給他/她他/她需要的東西,但是他/她沒有這種格式。 –
我添加了一個基本的R方法。仍然不需要附加組件。 –
看起來好多了! –
- 1. 1970年1月1日之前的日期
- 2. 如何轉換毫秒自1970年1月1日00:00:00至日期2016年1月20日
- 3. 爲什麼從1970年1月1日起計算日期?
- 4. 轉換例如。 2012-05-25 to秒自1970年1月1日
- 5. 使用C語言將1970年1月1日之前的秒轉換爲日期
- 6. xdsoft拍攝此日期1970年1月1日1:00 AM不拍攝當前日期?
- 7. T-SQL轉換2010年1月28日至2010年1月28日星期五
- 8. python:自1970年1月1日起,將年/月/日/小時/分/秒轉換爲#秒
- 9. Java時間:從1970年1月1日凌晨1點開始?
- 10. 從Gallery返回的日期總是返回1970年1月1日
- 11. DatePickerDialog錯誤地強制實施1970年1月1日的最低日期
- 12. 使用MediaStore.Images.Media.insertImage保存圖像,但日期時間爲1970年1月1日
- 13. NSDateComponents在1970年1月1日返回第53周
- 14. 喬達未在15年1月1日或之前格式化日期?
- 15. PHP的:日期+1顯示1970年
- 16. 將日期從1901年1月01日轉換爲unix/linux
- 17. Cronjob每年1月1日
- 18. 自1970年1月1日00:00:00以來的秒數Erlang
- 19. Java.util.Calendar - 1970年1月1日以來的毫秒數
- 20. Qt QDateTime 1970年1月1日以後的納秒
- 21. 獲取:1970年1月1日使用MySQL輸出JDBC列
- 22. ASP.NET:自1970年1月1日以來獲取毫秒
- 23. 減少午夜以來的毫秒數,1970年1月1日
- 24. localtime_s失敗其中gmtime_s成功與日期之前1-1-1970
- 25. 日期總是顯示01 1970年1月
- 26. 如何將日/月/年日期轉換爲自0001年1月1日以來.NET樣式100ns的勾號?
- 27. SQL日期格式轉換從2013年4月1日00:00:00.000,以2013年4月1日12:00:00
- 28. 將用戶輸入日期(2014年1月4日)轉換爲(2014年1月4日)
- 29. 如何將「2015年1月30日」轉換爲R中的日期對象?
- 30. C++ /轉換時間(NULL)到確切的年,月,周,小時和分鐘從1970年1月1日
你怎麼能決定什麼是正確的,例如如果是'1/1/16':是2016年還是1916年? – Christoph
@christoph在「69」後的兩位數年份必須是** 18 ** 70。 – Spacedman