3

入力データがあり、CODEという列に4または5のエントリがある行のみを表示するためにサブセット化します。次に、特定の種を見ることができるように、このデータをサブセット化しました。次に、DATE列のエントリが、係数(デフォルト)ではなく、日付として読み取られるようにしました。次に、2つの列を互いにプロットします。

ph<-read.csv(url("http://luq.lternet.edu/data/lterdb88/data/Lfdp1-ElVerdePhenology.txt"))
ftsd<-subset(ph, ph$CODE %in% c("4","5"))
DACEXC<-subset(ftsd, ftsd$SPECIES %in% "DACEXC")
DACEXC$DATE<-as.Date(DACEXC$DATE, format="%m/%d/%y")
plot(DACEXC$DATE,DACEXC$NUMBER)

データは1992年から2007年までのもので、1年ごとにプロットしたいと思います。私はこれをたくさんの種に対して行うつもりですが、それを行う方法がわかりません。x軸を制限したり、1年だけのサブセットを作成したりするなど、さまざまなことを試しましたが、理解できていません。私は次のアイデアのいくつかを試しました:

plot(DACEXC$DATE,DACEXC$NUMBER, xlim=c(1992,1993))
plot(DACEXC$DATE,DACEXC$NUMBER, xlim=c(01/01/1992,12/31/1992))
plot(DACEXC$DATE,DACEXC$NUMBER, xlim=c(1992:1993))

DACEXC92<-subset(DACEXC92, DATE==1992)
DACEXC92
[1] DATE    BASKET  SPECIES CODE    NUMBER 
<0 rows> (or 0-length row.names)

上記の場合、以下のように空のデータフレームが生成されますが、条件付き引数を作成する試みはどれも成功していません。

DACEXC92<-subset(DACEXC92, DATE==04/01/92)
DACEXC92
[1] DATE    BASKET  SPECIES CODE    NUMBER 
<0 rows> (or 0-length row.names)

一度に1年だけをプロットする方法、または各年のサブセットを作成する方法についてのアイデアはありますか?

4

2 に答える 2

4

日付を適切なDateTimeClass(POSIXctまたはDate)に変換してから、使用可能なツールを使用します。

 DACEXC$DATE <- as.POSIXct(strptime(DACEXC$DATE, "%Y-%m-%d"))

as.Date(DACEXC$DATE)またはas.POSIXct(DACEXC$DATE)を使用することもできますが、別の形式を使用すると何が問題になるのかを理解しやすくなるため、明示的に使用するのが好きです)。

POSIXlt表現から年コンポーネントを抽出し、特定の年に等しくします。

 with(DACEXC[as.POSIXlt(DACEXC$DATE)$year + 1900 == 1993, ], plot(DATE, NUMBER))

または年の範囲内:

with(DACEXC[as.POSIXlt(DACEXC$DATE)$year + 1900 %in% 1993:1995, ], 
     plot(DATE, NUMBER))

データが適切なDateTime形式になると、のような文字表現を使用したサブセット化など、多くのオプションがありますformat(DACEXC$DATE, "%Y") == "1993"

?strptimeフォーマットの詳細と?DateTimeClasses全体像については、を参照してください。

于 2011-03-02T05:52:49.200 に答える
3

xlim値が日付であることを確認してください:

with(DACEXC,
  plot(DATE,NUMBER, 
     xlim=as.Date(c("1992-01-01","1992-12-31"))
  )
)

これは次のようになります。

ここに画像の説明を入力してください

これはxlimのみを変更するため、翌年のデータは引き続き表示されることに注意してください。何年にもわたって作業したい場合は、パッケージを使用することもできますchron

library(chron)
DACEXC92 <- DACEXC[years(DACEXC$DATE)==1992,]
with(DACEXC92,plot(DATE,NUMBER))

これにより、目的のデータフレームが得られます。

ここに画像の説明を入力してください

于 2011-03-02T10:27:02.213 に答える