我有这样的数据;
"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日)选择数据的子集。我怎么能这样做?
我们将非常感谢您提供的任何帮助。提前谢谢。
答案 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.table
和lubridate
个包。我假设你想对你得到的子集进行多重操作 - 使用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)]
编辑:我没有意识到我回答了这么老的问题,哦。