R-дубликаты с разными мерами - PullRequest
1 голос
/ 02 апреля 2020

Я работаю с грязным набором данных переписи, в котором есть дубликаты в столбце variable (high school и university), но эти дубликаты фактически измеряют что-то немного другое. Показатель, в котором число выше в столбце count, представляет собой сумму для этих 15 лет и старше (highest_educ_15_over). А меньшее число всегда соответствует высшему образованию для 24-65 (highest_educ_24_65). Вот данные для визуала.

data <- tribble(
  ~town, ~variable, ~count,
  "A","highest_educ_15_over",100,
  "A","high school",80,
  "A","university",20,
  "A","highest_educ_24_65",50,
  "A","high school",40,
  "A","university", 10,
  "B","highest_educ_15_over",1000,
  "B","high school", 800,
  "B",   "university", 200,
  "B",  "highest_educ_24_65", 500,
  "B", "high school", 400,
  "B", "university", 100)

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

tribble(
  ~town, ~highest_educ_15_over, ~highschool, ~university,
  "A", "100","80","20",
  "B", "1000","800","200"
  )

Где я автоматически беру наибольшее значение для high school и university для каждого города и соответствующего общего знаменателя.

Есть идеи, как к этому подойти?

1 Ответ

1 голос
/ 02 апреля 2020

Мы можем сделать группу по порядку, а затем с помощью pivot_wider изменить ее на «широкий» формат

library(dplyr)
library(tidyr)
data %>% 
  group_by(town, variable) %>% mutate(rn = row_number()) %>% 
  pivot_wider(names_from = variable, values_from = count)  %>% 
  filter_at(3:ncol(.), all_vars(!is.na(.))) %>%
  select(-rn)
...