我有一个数据集(犯罪),有6,847,944个观测值。我正试图将该数据缩小到只有那些发生在2016年相关年份的数据。日期可以在 "日期 "列中找到。 我已经尝试了以下所有的代码。
#change dates to proper format#
Crime$Date = as.Date(Crime$Date, format = "%m/%d/%y")
#filter crimes to 2016#
ATTEMPT 1: Crime16 = subset(Crime$Date = as.Date("2016"))
结果1: Error: unexpected '=' in "Crime16 = subset(Crime$Date ="
ATTEMPT 2: RESULT 1: ATTEMPT 2: Crimes_2016 <- Crime[year(Date)==2016,]
结果2: Error in as.POSIXlt.default(x, tz = tz(x)) : do not know how to convert 'x' to class “POSIXlt”
ATTEMPT 3: RESULT 3: ATTEMPT 3: Crimes_2016 = subset(Crime, Date >=2016/1/1 & Date <= 2016/31/12)
结果3: 创建数据帧,但不包含任何观测值。
尝试4:结果4:创建数据帧,但不包含任何观测值。morecrimes = subset(Crime, Date == 2016)
结果4: 创建数据帧,但不包含任何观测值。
尝试5:结果5:创建数据帧,但不包含任何观测值。Crimes.2016 = selectByDate(Crime$Date = 2016)
结果5: Error: unexpected '=' in "Crimes.2016 = selectByDate(Crime$Date ="
如果没有一个合适的可重复的示例数据集,我不能确定你是什么后,但......采取以下数据框架作为测试。
x <- data.frame(
"Date" = as.Date(c("2016-01-01", "2015-05-12", "2016-06-16"), format = "%Y-%m-%d"),
"Crime" = LETTERS[1:3])
得到的结果是:
> x
Date Crime
1 2016-01-01 A
2 2015-05-12 B
3 2016-06-16 C
这可以是子集,生成一个逻辑向量,由以下方法生成 format(x$Date, "%Y") == "2016"
其中我将日期格式改为只有年份,并在data.frame的线性搜索中使用该格式来返回逻辑向量元素所在的行,即"TRUE
"如是。
> x[format(x$Date, "%Y") == "2016", ]
Date Crime
1 2016-01-01 A
3 2016-06-16 C
x[format(x$Date, "%Y") == "2016", ]
Giving:
> x[format(x$Date, "%Y") == "2016", ]
Date Crime
1 2016-01-01 A
3 2016-06-16 C
或者你可以使用dplyr函数 filter()
:
library(tidyverse)
# Route 1. Implement filter() the base R way
filter(x, format(x$Date, "%Y") == "2016")
# Route 2. Use filter() the tidyverse way
x %>% filter(format(x$Date, "%Y") == "2016")