Свертывание данных в Dataframe в R - PullRequest
0 голосов
/ 13 октября 2019

Я работаю над проблемой, когда я должен преобразовать набор данных так, чтобы он содержал 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`))

Заранее спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...