我如何将一个数据集子集到一个特定的年份?

问题描述 投票:0回答:1

我有一个数据集(犯罪),有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 ="

r dataframe date subset
1个回答
0
投票

如果没有一个合适的可重复的示例数据集,我不能确定你是什么后,但......采取以下数据框架作为测试。

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")
© www.soinside.com 2019 - 2024. All rights reserved.