library(tidyverse)
Here we are refining the sales data of properties that have sold in the last 12 months.
Our initial thought was to develop an expected price per square foot in a building to segment the buildings into poor, average and wealthy, and to compare properties tax outcomes, however we have learned through our literature and domain dives that NYC essentially has a regressive property tax system where buildings tend to pay the same in property taxes if they are the same size. NYC demonstrably does not have vertical equity, wherein properties of higher value pay proportionally or progressively more, so our focus is more on horizontal equity, if two relatively similar sized properties have roughly the same market value.
Our task has shifted from determining if there are inequities in the NYC property tax system to how to tell if a specific property is under, over, or paying approximately equal to what they should be, before the application of abatements or exemptions.
To that end, this dataset may not be useful because if the policy of the DOF is to not review actual sales data in valuing class 2 properties market value while valuing them as a hypothetical rental property, then we can’t use actual sales data to contest the market value assessed by the DOF.
# Load subset Sales data
df <- readRDS("~/Documents/D698/SALES.rds")
At least looking at our classic example, Block-Lot 1046-23, it looks
like the only information we would need to collect is
BLOCK
, LOT
, and SALE PRICE
. The
rest is duplicated in our previous databases.
If we wanted to do a rough valuation we could take the average sales price ($356,250 from the four sales for 1046-23 of $350k, $300k, $400k and $375k) and multiple it by the number of units (42) and divide by the total square footage of the building (26,959) to arrive at a price per square foot of $555.
This isn’t an accurate measure because likely the square footage of the building includes hallways, lobbies and common space not captured in our count of units, however it should still return a price-per-square-building-foot that can help distinguish between relative wealth among the buildings, albeit even if lower than the true price-per-square-apartment-foot.
For reference in NYC property tends to be between $800 to $1200 per square foot with prices near or below $800 being affordable or cheap and near or above $1200 being exclusive or luxury.
df2 <- df %>%
filter(BLOCK == 1046, LOT == 23)
t(head(df2,1))
## [,1]
## BOROUGH "1"
## NEIGHBORHOOD "MIDTOWN WEST"
## BUILDING CLASS CATEGORY "10 COOPS - ELEVATOR APARTMENTS"
## TAX CLASS AT PRESENT "2"
## BLOCK "1046"
## LOT "23"
## EASEMENT NA
## BUILDING CLASS AT PRESENT "D4"
## ADDRESS "315 WEST 55 ST, 1E"
## APARTMENT NUMBER NA
## ZIP CODE "10019"
## RESIDENTIAL UNITS NA
## COMMERCIAL UNITS NA
## TOTAL UNITS NA
## LAND SQUARE FEET NA
## GROSS SQUARE FEET NA
## YEAR BUILT "1945"
## TAX CLASS AT TIME OF SALE "2"
## BUILDING CLASS AT TIME OF SALE "D4"
## SALE PRICE "350000"
## SALE DATE "2024-08-06"
Here we subset for the three fields we are interested. All we need
are SALE PRICE
and BLOCK
&
LOT
for matching.
selected_vars <- c("BLOCK", "LOT", "SALE PRICE")
df3 <- df[, selected_vars]
Here we write the file for use in the subsequent merge file
# Write file
saveRDS(df3, file="sales2.rds")