R程序设计带日期列的过滤数据框
对于这种数据框,我试图选择特定日期范围内的一些行:R程序设计带日期列的过滤数据框,r,R,对于这种数据框,我试图选择特定日期范围内的一些行: nasdaq=read.csv("nasdaq.csv") head(nasdaq) Date Close.Price 1 2013-08-05 3692.95 2 2013-08-06 3665.77 3 2013-08-07 3654.01 4 2013-08-08 3669.12 5 2013-08-09 3660.11 6 2013-08-12 3669.95 到目前为
nasdaq=read.csv("nasdaq.csv")
head(nasdaq)
Date Close.Price
1 2013-08-05 3692.95
2 2013-08-06 3665.77
3 2013-08-07 3654.01
4 2013-08-08 3669.12
5 2013-08-09 3660.11
6 2013-08-12 3669.95
到目前为止,我尝试的是:
chunk=subset(nasdaq,nasdaq$Date>=as.Date("2013-08-05") & nasdaq$Date<=as.Date("2018-08-03"))
chunk=subset(纳斯达克,纳斯达克$Date>=as.Date(“2013-08-05”)&纳斯达克$Date=as.Date(“2013-08-05”)&纳斯达克$Date=as.Date(“2013-08-05”)和:
“>=”的不兼容方法(“运行系数”、“运行日期”)
2:在“[.data.frame”(纳斯达克,纳斯达克$Date>=截止日期(“2013-08-05”)和:
“的不兼容方法(“运行系数”、“运行日期”)应该适合您
library(dplyr)
library(lubridate)
# dummmy data
test_data <- data.frame(
Date = ymd(c("2013-08-05","2013-08-06 ","2013-08-07")),
Close.Price = c(3692.95,3665.77,3654.01)
)
test_data %>%
filter(Date >= ymd("2013-08-05") & Date <= ymd("2013-08-07"))
Date Close.Price
1 2013-08-05 3692.95
2 2013-08-06 3665.77
3 2013-08-07 3654.01
库(dplyr)
图书馆(lubridate)
#愚蠢的数据
测试数据%
filter(Date>=ymd(“2013-08-05”)&Date您需要在as.Date()函数中指定日期字符串的格式,然后才能在subset函数中使用它
nasdaq$Date <- as.Date(nasdaq$Date, format = "%Y-%m-%d")
chunk <- subset(nasdaq,nasdaq$Date >= "2013-08-05" & nasdaq$Date <= "2018-08-03")
nasdaq$Date警告消息会告诉您该问题。数据框中的列Date
是一个因子,而不是一个日期。这是因为您没有在read.csv
中指定stringsafactors=FALSE
(那么Date
将是一个字符)
有几种方法可以解决此问题。您可以在读取数据后转换为日期:
nasdaq$Date <- as.Date(nasdaq$Date, "%Y-%m-%d")
或者您可以使用readr::read_csv
,它将识别列中包含日期。您已经通过不执行read.csv(“nasdaq.csv”,stringsAsFactors=F)
读取了日期作为一个因子。这是步骤1。
library(dplyr)
library(lubridate)
# dummmy data
test_data <- data.frame(
Date = ymd(c("2013-08-05","2013-08-06 ","2013-08-07")),
Close.Price = c(3692.95,3665.77,3654.01)
)
test_data %>%
filter(Date >= ymd("2013-08-05") & Date <= ymd("2013-08-07"))
Date Close.Price
1 2013-08-05 3692.95
2 2013-08-06 3665.77
3 2013-08-07 3654.01
nasdaq$Date <- as.Date(nasdaq$Date, format = "%Y-%m-%d")
chunk <- subset(nasdaq,nasdaq$Date >= "2013-08-05" & nasdaq$Date <= "2018-08-03")
nasdaq$Date <- as.Date(nasdaq$Date, "%Y-%m-%d")
nasdaq <- read.csv("nasdaq.csv", header = TRUE, colClasses = c("Date", "numeric"))