【问题标题】:How can I subset a dataset to a specific year?如何将数据集子集到特定年份?
【发布时间】:2020-08-19 12:21:02
【问题描述】:

我有一个包含 6,847,944 个观察值的数据集(犯罪)。我正在尝试将这些数据缩小到仅发生在 2016 年相关年份的数据。日期可以在“日期”列中找到。我已经尝试了以下所有代码:

#change dates to proper format#
Crime$Date = as.Date(Crime$Date, format = "%m/%d/%y")

#filter crimes to 2016#

尝试 1:Crime16 = subset(Crime$Date = as.Date("2016"))

结果 1:Error: unexpected '=' in "Crime16 = subset(Crime$Date ="

尝试 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”

尝试 3:Crimes_2016 = subset(Crime, Date >=2016/1/1 & Date <= 2016/31/12)

结果 3:创建数据框,但不包含观察结果。

尝试 4:morecrimes = subset(Crime, Date == 2016)

结果 4:创建数据框,但不包含观察结果。

尝试 5:Crimes.2016 = selectByDate(Crime$Date = 2016)

结果 5:Error: unexpected '=' in "Crimes.2016 = selectByDate(Crime$Date ="

【问题讨论】:

标签: r dataframe date subset


【解决方案1】:

如果没有适当的可重现示例数据集,我无法确定您所追求的是什么,但是...将以下数据框作为测试:

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", ]

给予:

> 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")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-12-29
    • 1970-01-01
    • 2014-11-22
    • 1970-01-01
    • 2018-07-14
    • 1970-01-01
    • 1970-01-01
    • 2019-09-12
    相关资源
    最近更新 更多