Выберите дату из столбца даты - PullRequest
1 голос
/ 12 июля 2011

У меня есть такие данные;

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

4 голосов
/ 12 июля 2011

Как то так.

Чтение табличных данных из файла, я предполагаю, что ваш файл действительно выглядит так, как будто он у вас есть, но без пустых строк.

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 голосов
/ 24 октября 2017

Вот другой подход - использование пакетов 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)]

РЕДАКТИРОВАТЬ: Я не понял, что я отвечаю на такой старый вопрос, ну хорошо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...