Запись категориальной переменной - PullRequest
0 голосов
/ 08 июня 2019

Я не могу сгруппировать более крупные "категории" из существующих в переменных "Text_General_Code".

Я пытался обработать "Text_General_Code" в одиночку.Это дало мне более восьми переменных в моем файле отчета.

library(ggplot2)
library(lubridate)
library(zoo)
library(dplyr)
library(knitr)
library(plotly)

# Read csv in R
## 
pdx = read.csv("https://cyo.arringtonadventures.com/crime/crime.csv",header = T)
head(pdx)

# Create a variable count with value 1
pdx$Count <- 1

# Convert Date from factor to date
#pdx$Date <- mdy_hms(pdx$Dispatch_Date_Time)

# Extract year from Date
pdx$Year <- substring(pdx$Dispatch_Date,1,4)

# Rename District from Dc_Dist 
colnames(pdx)[1] <- "District"

# Drop all variables we are not interested in
#select(pdx, -2,-3,-5,-7,-8,-9,-11,-12,-13,-14)

# Group Text_General_Code by categories
pdx$Category[pdx$Text_General_Code == "THEFT" | pdx$Text_General_Code == "MOTOR VEHICLE THEFT"]  <- "Theft"
pdx$Category[pdx$Text_General_Code == "BATTERY"] <- "Battery"
pdx$Category[pdx$Text_General_Code == "CRIMINAL DAMAGE"] <- "Criminal damage"
pdx$Category[pdx$Text_General_Code == "NARCOTICS" | pdx$Text_General_Code == "OTHER NARCOTIC VIOLATION"] <- "Narcotics"
pdx$Category[pdx$Text_General_Code == "ASSAULT"] <- "Assault"
pdx$Category[pdx$Text_General_Code == "BURGLARY"] <- "Burglary"
pdx$Category[pdx$Text_General_Code == "ROBBERY"]  <- "ROBBERY"
pdx$Category[pdx$Text_General_Code == "ARSON" | pdx$Text_General_Code == "CONCEALED CARRY LICENSE VIOLATION" |
            pdx$Text_General_Code == "CRIMINAL TRESPASS" | pdx$Text_General_Code == "GAMBLINGS" |
            pdx$Text_General_Code == "HUMAN TRAFFICKING" | pdx$Text_General_Code == "INTERFERENCE WITH PUBLIC OFFICER" |
            pdx$Text_General_Code == "INTIMIDATION" | pdx$Type == "KIDNAPPING" | pdx$Type == "LIQUOR LAW VIOLATION" |
            pdx$Text_General_Code == "NON-CRIMINAL" | pdx$Text_General_Code == "NON - CRIMINAL" | 
            pdx$Text_General_Code == "OBSCENITY" | pdx$Text_General_Code == "OFFENSE INVOLVING CHILDREN"| 
            pdx$Text_General_Code == "PROSTITUTION" | pdx$Text_General_Code == "PUBLIC INDECENCY"| 
            pdx$Text_General_Code == "PUBLIC PEACE VIOLATION" | pdx$Text_General_Code == "STALKING"| 
            pdx$Text_General_Code == "WEAPONS VIOLATION"| pdx$Text_General_Code == "HOMICIDE" |
            pdx$Text_General_Code == "CRIM SEXUAL ASSAULT" | pdx$Text_General_Code == "SEX OFFENSE" |
            pdx$Text_General_Code == "DECEPTIVE PRACTICE" | pdx$Text_General_Code == "OTHER OFFENSE"] <- "Others"

Я ожидаю, что все переменные сгруппируются в переменную "категория".Я должен получить только «Нападение», «Батарея», «Кража со взломом», «Криминальный ущерб», «Наркотики», «Ограбление», «Кража» и все остальное должно быть сгруппировано в «Другие».Я получаю «NA» в переменной «Category».

Примечание: входной набор данных содержит 2,3M записей, для запуска может потребоваться несколько минут

1 Ответ

1 голос
/ 09 июня 2019

Для начала в операторе read.csv добавьте stringsAsFactors=F, чтобы при работе с ним не было уровней факторов.Кроме того, может помочь убедиться, что поле Text_General_Code одинаково:

    pdx = read.csv("https://cyo.arringtonadventures.com/crime/crime.csv",header = T, stringsAsFactors=F) %>%
          mutate(Text_General_Code = str_to_sentence(Text_General_Code)) 

Затем выполните подсчет значений в Text_General_Code и, возможно, выведите его на объект, который вы можете проверить (при условии, что выusing Rstudio):

   tgc <- pdx %>%
   count(Text_General_Code)
   view(tgc)

Тогда вы увидите, что часть проблемы - это то, что вы ищете в разделе # Group Text_General_Code по категориям, на самом деле не существует.И один, «БАТАРЕЯ», вообще не существует.

В качестве стратегии группировки вы можете попробовать использовать оператор case_when в цепочке dplyr:

pdx <- pdx %>%
  mutate(category = case_when(Text_General_Code == "Thefts" | 
                              Text_General_Code == "Motor Vehicle Theft" |
                              Text_General_Code == "Theft from Vehicle" 
                               ~ "Theft",
                             Text_General_Code == "Robbery Firearm" | 
                              Text_General_Code == "Robbery No Firearm" 
                              ~ "Robbery"))

..и т. д., пока вы не сгруппируете, как хотите.

Затем для контроля качества выполните проверку:

pdx %>%
   count(category, Text_General_Code)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...