我有这样的数据;从日期栏选择日期列
"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天)选择一个数据子集。我怎样才能做到这一点?
任何帮助,您可以提供将不胜感激。提前致谢。
我有这样的数据;从日期栏选择日期列
"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天)选择一个数据子集。我怎样才能做到这一点?
任何帮助,您可以提供将不胜感激。提前致谢。
就是这样。
从文件中读取表格数据,我假设你的文件真的看起来像你有它,但没有空行。
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
这里的另一种方法 - 使用data.table
和lubridate
包。我假设你想要做的子集,你得到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)]
编辑:我不知道,我回答这样一个老问题,哦,好。
我在这里第一次与yday而不是mday一起发生错误,现在应该修复 – mdsumner