从日期列中选择日期

时间:2011-07-12 06:03:47

标签: r

我有这样的数据;

"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日)选择数据的子集。我怎么能这样做?

我们将非常感谢您提供的任何帮助。提前谢谢。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

这是另一种方法 - 使用data.tablelubridate个包。我假设你想对你得到的子集进行多重操作 - 使用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)]
编辑:我没有意识到我回答了这么老的问题,哦。