我想根据rownames中的日期对data.frame
进行子集化。我的日期是这种格式:
192707
192708
192709
df$Date <- as.yearmon(as.character(df$Date), "%Y%m")
编辑:我将rownames设置为像这样的Date变量(并希望之后删除Date):
rownames(df)<-df$Date
我想到了像这样的子集:
train_dates <- seq(as.yearmon(as.character("1959-12-31"), "%Y%m"), as.yearmon(as.character("1984-12-31"), "%Y%m", "months"))
df <- subset(df, rownames(df) %in% train_dates)
或
df[train_dates,]
但是我在创建正确的序列时遇到了困难。
答案 0 :(得分:1)
尝试使用choice = Integer.parseInt(input1);
if (choice < 1 || choice > maxVal) {
validInput = false;
} else {
validInput = true;
}
format
然后使用 train_dates <- format(seq(as.Date.character('1959-01-31'),
as.Date.character('1959-12-31'), by = 'month'), '%Y%m')
library(data.table)
答案 1 :(得分:1)
One solution could be using rownames_to_column
from tibble
package.
#data
df <- data.frame(A = 1:5, B = letters[1:5])
rownames(df) <- c("195901", "196008", "196109", "201812", "196112")
# A B
# 195901 1 a
# 196008 2 b
# 196109 3 c
# 201812 4 d # not in train_dates
# 196112 5 e
library(zoo)
#create sequence from 1959 to 1968. Lookup table
train_dates <- format(as.yearmon(1959 + seq(0, 119)/12), format="%Y%m")
Option #1:
library(tidyverse)
df %>%
rownames_to_column("datemon") %>%
filter(datemon %in% train_dates) %>%
column_to_rownames("datemon")
# A B
# 195901 1 a
# 196008 2 b
# 196109 3 c
# 196112 5 e
Option #2
df[rownames(df) %in% train_dates, ]
# A B
# 195901 1 a
# 196008 2 b
# 196109 3 c
# 196112 5 e