Как я могу разделить набор данных на определенный c год? - PullRequest
0 голосов
/ 05 мая 2020

У меня есть набор данных (Crime) с 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 ="

1 Ответ

0 голосов
/ 05 мая 2020

Без надлежащего воспроизводимого примера набора данных я не могу быть уверен в том, что вам нужно, но ... взяв следующий фрейм данных в качестве теста:

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")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...