对于这样的数据框,我试图选择特定日期范围内的一些行:
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"))
警告消息:
1: In eval(e, x, parent.frame()) :
Incompatible methods ("Ops.factor", "Ops.Date") for ">="
2: In eval(e, x, parent.frame()) :
Incompatible methods ("Ops.factor", "Ops.Date") for "<="
我也尝试过...
chunk=nasdaq[nasdaq$Date>=as.Date("2013-08-05") & nasdaq$Date<=as.Date("2018-08-03"),]
警告消息:
1: In `[.data.frame`(nasdaq, nasdaq$Date >= as.Date("2013-08-05") & :
Incompatible methods ("Ops.factor", "Ops.Date") for ">="
2: In `[.data.frame`(nasdaq, nasdaq$Date >= as.Date("2013-08-05") & :
Incompatible methods ("Ops.factor", "Ops.Date") for "<="
我在没有 as.Date 函数的情况下尝试了上述两种方法,但不起作用,请告诉我哪里可能出错?
最佳答案
警告消息告诉您问题所在。数据框中的Date
列是一个因素,而不是日期。这是因为您没有在 read.csv
中指定 stringsAsFactors = FALSE
(那么 Date
将是一个字符)。
有多种方法可以解决此问题。读取数据后可以转换为日期:
nasdaq$Date <- as.Date(nasdaq$Date, "%Y-%m-%d")
或者您可以在读取文件时使用 colClasses
参数:
nasdaq <- read.csv("nasdaq.csv", header = TRUE, colClasses = c("Date", "numeric"))
或者您可以使用 readr::read_csv
,它将识别该列包含日期。
关于R编程用日期列过滤数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51867390/