通过作为日期的列来对数据帧进行子集化

时间:2018-03-22 21:37:46

标签: r date dataframe subset

我想根据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,]

但是我在创建正确的序列时遇到了困难。

2 个答案:

答案 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