13

xlsを使用してファイルをインポートしていますgdata。日付の変換に使用して日付列をas.Date変換しています

のマニュアルによるas.Dateと、日付の原点はプラットフォームに依存するため、それに応じてどの原点を使用するかを決定しています

.origin <- ifelse(Sys.info()[['sysname']] == "Windows", "1899-12-30", "1904-01-01")
as.Date(myData$Date, origin=.origin)

ただし、ファイルが読み取られているプラ​​ットフォームまたはファイルが書き込まれたプラットフォームを検討する必要があるかどうか疑問に思っています。

価値があるのは、私は現在、Excel のない Linux ボックスでコードをテストしており、正しい日付は次を使用して生成されますorigin="1904-01-01"


`?as.Date' の引用

  ## date given as number of days since 1900-01-01 (a date in 1989)
  as.Date(32768, origin = "1900-01-01")
  ## Excel is said to use 1900-01-01 as day 1 (Windows default) or
  ## 1904-01-01 as day 0 (Mac default), but this is complicated by Excel
  ## treating 1900 as a leap year.
  ## So for dates (post-1901) from Windows Excel
  as.Date(35981, origin = "1899-12-30") # 1998-07-05
  ## and Mac Excel
  as.Date(34519, origin = "1904-01-01") # 1998-07-05
  ## (these values come from http://support.microsoft.com/kb/214330)

4

2 に答える 2

5

(非常に) 新しい exell パッケージを試すことができます: https://github.com/hadley/exell。Excel の日付を POSIXct にロードし、ファイルが Windows または Mac Excel で書き込まれたかどうかに基づいて、原点を正しく選択します。

于 2015-03-17T11:22:56.173 に答える
3

はい、ファイルが書き込まれた場所を考慮する必要があります。Excel-Windows は、Mac で書かれた日付と Win で書かれた日付を区別できるように見えますが、これらが Mac で作成された .xls ファイルであるという証拠を得ています。

最も安全な方法は、データが入力されたバージョンの Excel 内で作業し、書式メニューを使用してダイアログ ボックスを表示し、そこから as-Date と yyyy-mm-dd のカスタム書式を選択することです。次にcsvファイルとして保存すると、適切な列位置にあるcolClassesベクター「Date」を使用してRにインポートできます。しかし、それは利用できないオプションのように聞こえます。

Linuxボックスには当てはまらないので、これは単なるMacの泣き言です.gdata-packageは非推奨の警告を出し、通常のPerl 5.8のインストールでR 3.0.0にXLSXサポートファイルをインストールできません. 「/opt/local/bin/perl」。これは、「gdata::findPerl」が正常に検索できるにもかかわらずです。

この時点で、ファイルのプロパティを検査するように gdata 関数を誘導できるかどうかを尋ねることに質問をリダイレクトする必要があると思います。xls 読み取りのコードベースを見た後、さまざまな xls バージョンの検査についての言及が見られないため、私はむしろそれを疑っています。

Mac バージョンの Excel で作成された空白の xls ファイルの末尾付近をテキスト エディターで見ると、次のように表示されます。

Worksheets˛ˇˇˇˇˇ ¿F$Microsoft Excel 97 - 2004 Worksheet˛ˇˇˇ8FIBExcel.Sheet.8˛ˇ
‡ÖüÚ˘Oh´ë+'≥Ÿ0îHPhħ
∞ºƒ'David WinsemiusDavid WinsemiusMicrosoft Macintosh Excel@ê˚á!Ë+Œ@ê'å-Ë+ŒG»˛ˇˇˇPICT¿Kġ

もう 1 つの違いは、同じように検査した Windows 版では、ワークシートの種類が「Excel 2003 ワークシート」であったのに対し、Mac 版では「Excel 97 - 2004」であったことです。したがって、「Macintosh」のスキャン中に読み取りまたは grep するときにトリガーされるすべてのエラーをバイパスするように R を強制することができます。たぶん、Linux-R はその種のことに対してより耐性がありますか?

Error: invalid multibyte string at '<ff>'

また、一部の文字列を「見る」ことができない可能性があることを示唆する、grep からの警告も多数受け取りました。

Warning message:
In grep("Macintosh", lin) : input string 1 is invalid in this locale

gdata パッケージの一部である xls2csv.pl の Perl コードから、より堅牢なコードをハイジャックできる可能性があります。

于 2013-03-28T18:47:39.237 に答える