2011-07-12 27 views
1

私はこのようなデータを持っています。日付欄から日付を選択

"Date"  "Observe"  "Simulation" 

1/01/1985   9.8   7.65 

16/01/1985  7.5    5.74 

1/02/1985   5.6    3.35 

16/02/1985  4.6    3.15 

私はRを使用しています。特定の日付(つまり、毎月16日)のデータのみを選択するサブセットを作成したいとします。これどうやってするの?

ご協力いただければ幸いです。前もって感謝します。

答えて

4

このようなものです。

ファイルから表データを読み込みますが、あなたのファイルは実際には見えますが、空の行はありません。

dat <- read.table("file.txt", header = TRUE, 
    colClasses = c("character", "numeric", "numeric")) 

Date列を既知のDateクラスに変換し、使用する形式を明示的に指定します。利用可能なコードについては?strptimeを参照してください。

dat$gDate <- as.Date(dat$Date, "%d/%m/%Y") 

日が「16」でない行を廃棄論理ベクトルと原本データサブセット

datesub <- (as.POSIXlt(dat$Date)$mday) == 16 
16に等しい月日とTRUE/FALSEに一致する論理ベクトルを作成します。

dat16only <- dat[datesub, ] 

?read.table?as.Date?DateTimeClasses?Comparison?Extract

+0

私はここではじめてmdayではなくydayでエラーが発生しましたが、今修正する必要があります – mdsumner

0

を参照してくださいここで別のアプローチだ - data.tablelubridateパッケージを使用するには。

library(data.table) 
library(lubridate) 
dat <- data.table(dte = sapply(c(1:15, 12:25, 20:31, 1:31), 
           function(z) paste(z,"01/1985",sep="/")), 
        observe = rnorm(n = 72, mean = 1, sd = 12), 
        simul = rnorm(n = 72, mean = 0.5, sd = 10)) 

dat$dte <- as.Date(dat$dte, "%d/%m/%Y") 

# subset for a certain day - 20 
dat[day(dte) == 20] 

# Aggregate by day 
new_dat <- dat[, lapply(.SD, mean), by = day(dte)] 

EDITは:私は、このような古いに答えるてることを認識していなかったことがdata.tableパッケージとそれらを行うことはとても簡単です - 私はあなたが得ることサブセットにmultuple操作をしたいと仮定しています質問、ああ。

関連する問題