Я отримав матрицю m, яка виглядає так:
df <- c("2011-01-02", "2011-01-05", "2011-01-08", "2011-01-11", "2011-01-14",
"2011-01-17", "2011-01-20", "2011-01-23", "2011-01-26", "2011-01-29",
"2011-02-01", "2011-02-04", "2011-02-07", "2011-02-10", "2011-02-13")
m <- matrix(nrow = 1, ncol = 15, byrow = T, data = df)
Записи в межах матриці Date
об'єктів класу.
У мене є інтервал із:
start <- as.Date("2011-01-26")
end <- as.Date("2011-02-10")
Тепер я хочу виділити всі дати в матриці mякі потрапляють у цей інтервал (наприклад, з 9 по 14) і виводять їх у нову матрицю. Я не зміг виконати цей вибір, будь-який вхід дуже цінується! Я використовую lubridate
упаковка в Р.
Форматування матриці m відображає частину першого рядка моєї початкової матриці дат, яка сама має dim = (96, 850)
.
EDIT1: відредаговані для ясності, "старт" і "кінець" були Date
типи, але не позначені як такі.
Відповіді:
3 для відповіді № 1Найкраще підійти до ваших дат як Date
клас
# convert to Dates
m <- as.Date(m)
start <- as.Date(start)
end <- as.Date(end)
Використовуйте dplyr::between
для фільтрації даних
require(dplyr)
ans <- m[dplyr::between(m, start, end)] # m >= start && m <= end
# [1] "2011-01-26" "2011-01-29" "2011-02-01" "2011-02-04" "2011-02-07"
# [6] "2011-02-10"
Це виводить вектор.
Для виводу матриці спробуйте щось подібне
n <- m
n[!dplyr::between(n, start, end)] <- NA
newm <- matrix(nrow=1, ncol=15, byrow=T, data=n)
1 для відповіді № 2
Тут використовується базовий метод R seq
для створення дат між початком і кінцем і %in%
m[m %in% as.character(seq(as.Date(start), as.Date(end), by="day"))]
[1] "2011-01-26" "2011-01-29" "2011-02-01" "2011-02-04" "2011-02-07" "2011-02-10"
Зауважимо, що Date - це клас в R, як і матриця. Досить складно (мабуть, неможливо) зберігати дати в матриці як об'єкти Date. Натомість, вказані вище дані зберігаються як символи.
Це рішення перетворює початок і кінець на Дати за допомогою as.Date
а потім використовує seq
для створення вектора щоденних дат від початку до кінця. Потім вони перетворюються в символи і використовуються для порівняння елемента m %in%
. Нарешті, [
використовується для вилучення бажаних елементів.