2011-07-12 47 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") 

创建逻辑矢量以匹配TRUE/FALSE与月,日,等于16

datesub <- (as.POSIXlt(dat$Date)$mday) == 16 

子集的原始数据与逻辑向量,丢弃行,其中的日子是不是“16”。

dat16only <- dat[datesub, ] 

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

+0

我在这里第一次与yday而不是mday一起发生错误,现在应该修复 – mdsumner

0

这里的另一种方法 - 使用data.tablelubridate包。我假设你想要做的子集,你得到multuple操作 - 它真的很容易做那些与data.table包:

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)] 

编辑:我不知道,我回答这样一个老问题,哦,好。