Как избавиться от нескольких столбцов с одинаковым именем в R? - PullRequest
1 голос
/ 20 апреля 2019

Я собираю оценки SAT по школьным округам в Техасе и их расходам на образование. Данные для баллов SAT поступают в CSV-файлы, которые разбиты по годам. Я хочу объединить оценки в свой информационный фрейм, в котором указана сумма расходов на образование, без создания нескольких столбцов «Итого», «Математика», «Чтение» и т. Д.

Я пробовал разные типы функций соединения: semi_join, full_join, left_join и т. Д., Но ни одна из них, похоже, не решает проблему, с которой я столкнулся.

temp1 <-left_join (temp, sat17, by = c ("District", "year"))%>%

left_join (., Sat16, by = c ("Район", "год"))%>%

left_join (., Sat15, by = c ("Район", "год"))%>%

left_join (., Sat14, by = c ("Район", "год"))%>%

left_join (., Sat13, by = c ("Район", "год"))%>%

left_join (., Sat12, by = c ("Район", "год"))%>%

left_join (., Sat11, by = c ("Район", "год"))

Вывод дает мне столбцы Math.x, Math.y, Total.x, Total.y и т. Д. Для каждого объединенного фрейма данных. Кроме того, sat17 включает столбец с именем ERW вместо чтения, потому что тест изменился в этом году. Я хочу разделить ВПВ, а остальные баллы по чтению, математике и общему количеству выстроить под одним столбцом.

Ответы [ 3 ]

2 голосов
/ 20 апреля 2019

Я думаю, что вы хотите связать их вместе ... то есть "сложить" их один поверх другого.

Попытка:

do.call(rbind, dfs) # dfs is the list of dataframes

или используя purrr

library(purrr)
bind_rows(dfs, .id = NULL)
0 голосов
/ 20 апреля 2019

Объяснение

dplyr автоматически переименует любые столбцы, к которым вы не присоединяетесь, на , а имеют совпадающее имя столбца в объединенном наборе данных.

В вашем случае, поскольку вы хотите присоединиться только к by=c("District", "year"), любые другие столбцы с таким же именем будут переименованы.

Столбцы начального набора данных, к которым .x добавляетсяконец их имени, в то время как оставленные столбцы добавляются .y к концу их имени.

Решение

Если вы хотите, чтобы Math, Reading и Total находились в одном столбце, вам нужно сложить наборы данных друг над другом с помощью dplyr::bind_rows()

combined_sat <- dplyr::bind_rows(sat17, sat16, sat15, sat14, sat13, sat12,  sat11)
0 голосов
/ 20 апреля 2019

Или, скажем, вы хотите просто связать их на уровне .csv для начала, просто выбросьте все свои файлы в подкаталог с именем "data".Вы можете попробовать что-то вроде этого:

setwd("./data/")
library(purrr)
library(tidyverse)
binded_data <- tibble(filenames = list.files()) %>%
  mutate(yearly_sat = map(filenames, read_csv)) %>%
  unnest()
...