1

過去にあることがわかっている日付のリストがありますが、形式は28/MAY/13です。それらから日付クラスを作成する最も近い方法は、基本的なものです

dates <- as.Date(dates, format="%d/%b/%y")

ページに記載されているように、1968年より前の日付を除くすべての日付でうまく機能し?as.Dateます。

%y 世紀なしの年 (00 ~ 99)。入力では、値 00 から 68 には 20 が、69 から 99 には 19 がプレフィックスとして付けられます。これは 2004 および 2008 POSIX 標準で指定された動作ですが、「将来のバージョンでは、デフォルトの世紀が2 桁の年が変わります。

Excel は、30 年を超える年はすべて 1930 年などと仮定して (この場合は正しく)、この点で少し優れています。ただし、可能であれば 1914 年に戻ることをお勧めします。Rにすべての日付を過去のものとして解釈させるにはどうすればよいですか?

4

4 に答える 4

3

このようなもの:

Sys.setlocale("LC_TIME", "English")

dates <- as.Date(c("28/MAY/13","28/MAY/14"), format="%d/%b/%y")
#[1] "2013-05-28" "2014-05-28"

sub100 <- function(x) {
  x <- as.POSIXlt(x)
  x$year <- x$year-100
  as.Date(x)
}


dates[dates > as.Date("2013-12-31")] <- sub100(dates[dates > as.Date("2013-12-31")])
#[1] "2013-05-28" "1914-05-28"
于 2013-05-29T08:47:47.283 に答える
2

ローランドの答えを少し改良したものです。sub100まったく新しい機能を持つのではなく、lubridateyear機能を使用するだけです。

library(lubridate)
dates <- as.Date(c("28/MAY/13","28/MAY/14"), format="%d/%b/%y")
after_cut_off <- dates > as.Date("2013-12-31")
dates[after_cut_off] <- dates[after_cut_off] - years(100) #this is the new bit
于 2013-05-29T09:47:54.063 に答える
0

私にとって完璧に機能する1つのソリューションを手に入れました。

Y2K Excel 問題: Excel のすべてのバージョンで、「=YEAR()」関数で変換すると、日付 (月-年) または (月-01) の 2 つの単語が 2001 年ではなく 1901 年と見なされます。通常、これは、2 ワードの日付形式を持つ古いデータベースを Excel にダウンロードしたときに発生しました。

Y2K Excel ソリューション (VBA ではない) : そのような日付形式のすべて (列/行) をテキストとしてコピーし、小さな数式を使用して適切な年形式に変換します (2001 年から 2099 年まではうまく機能します)。同じく3000。それまでは、マイクロソフトがより良い解決策を考え出すと確信しています。

Y2K Excel 数式: C1="20"&RIGHT(B1,2)。A1: 元の日付 B1: 日付をテキスト形式にコピー C1: 正しい年に変換する式。

于 2016-03-11T07:05:20.290 に答える