Я работаю над проблемой, когда я должен преобразовать набор данных так, чтобы он содержал 6 столбцов, включая:
- county: название округа (например, «Нассау Каунти»)
- штат: название штата (например, «Нью-Йорк»)
- сектор: название отрасли (например, «Проживание и питание»)
- равно: среднеезаработная плата, выплачиваемая фирмами, у которых есть право собственности, распределяется поровну между мужчинами и женщинами
- женщина: средняя заработная плата, выплачиваемая фирмами, которые в основном принадлежат женщинам
- мужчины: средняя заработная плата, выплачиваемая фирмами, которыми владеютв основном мужчинам
Мне удалось получить необходимые столбцы, но у меня возникли проблемы с объединением строк, чтобы было значение для равных, женщин и мужчин (если они существуют).
Вот что у меня есть:
library(tidyverse)
#Import data
US_cen <- read.csv(url("https://s3.amazonaws.com/itao-30230/aff_2012.csv"))
#Delete first row, which is just description of the variables
US_cen <- US_cen[-c(1),]
US_cen <- US_cen %>%
#selecting only necessary columns
select(GEO.display.label, NAICS.display.label, SEX.display.label, EMP, PAYANN) %>%
#splitting the GEO.display.label into County and State
separate(GEO.display.label, c('County','State'), ', ') %>%
#Only keep payroll values that have a numeric number, not S
filter(PAYANN != "S") %>%
#Get rid of aggregated records for all sectors to remove duplicates
filter(NAICS.display.label != "Total for all sectors") %>%
#Only keep female-owned, male-owned, and equall-owned to get rid of duplicate aggregated information
filter(SEX.display.label == "Female-owned" | SEX.display.label == "Male-owned" | SEX.display.label == "Equally male-/female-owned") %>%
#Turn PAYANN and EMP into numeric type so that we can perform calculations
transform(PAYANN = as.numeric(PAYANN)) %>%
transform(EMP = as.numeric(EMP)) %>%
#Calculating the average salary for the group by dividing the payroll by number of paid employees
#Multiply by 1000 because the PAYANN is measured in thousands
mutate(AVGSAL = 1000*PAYANN/EMP) %>%
#Round the AVGSAL (a numeric column) to 2 decimal points to make the data less ugly
mutate_if(is.numeric, ~round(., 2)) %>%
#rename the NAICS.display.label
mutate(Sector = NAICS.display.label) %>%
#make the data wider for the SEX.display label so female, male, and equal will each be in their own column
spread(key = SEX.display.label, value = AVGSAL)
Я попытался скомбинировать строки с помощью группировки, но в итоге я получаю NA в строках, где я знаю, что должно быть по крайней мереодно значение. Вот что я пробовал, но я делаю что-то не так:
test <- US_cen %>%
group_by(County, State, Sector) %>%
summarise(Equal=max(`Equally male-/female-owned`), Female=max(`Female-owned`), Male=max(`Male-owned`))
Заранее спасибо!