У меня есть набор наборов данных и словарь, чтобы собрать их воедино. Но я изо всех сил пытаюсь понять, как это автоматизировать.
Предположим, эти данные и словарь (фактический намного длиннее, поэтому я хочу автоматизировать):
mtcarsA <- mtcars[1:5,] %>% rename(mpgA = mpg, cyl_A = cyl) %>% as_tibble()
mtcarsB <- mtcars[6:10,] %>% rename(mpg_B = mpg, B_cyl = cyl) %>% as_tibble()
dic <- tibble(true_name = c("mpg_true", "cyl_true"),
nameA = c("mpgA", "cyl_A"),
nameB = c("mpg_B", "B_cyl")
)
Я хочу, чтобы эти наборы данных (из лет A и B) добавлялись друг к другу, а затем чтобы имена были изменены или объединены со значениями true_name.
Я могу объединить наборы данных в mtcars_all
, а затем я попытался перекодировать имена столбцов со словарем следующим образом
mtcars_all <- bind_rows((mtcarsA, mtcarsB)
recode_colname <- function(df, tn=dic$true_name, fname){
colnames(df) <- dplyr::recode(colnames(df),
!!!setNames(as.character(tn), fname))
return(df)
}
mtcars_all <- mtcars_all %>%
recode_colname(fname=dic$nameA) %>%
recode_colname(fname=dic$nameB)
Но затем я получаю повторяющиеся столбцы. Конечно, я мог бы объединить каждый из этих повторяющихся столбцов по имени, но в моем реальном случае их будет много, поэтому я хочу автоматизировать «объединение всех столбцов с повторяющимися именами».
Я излагаю здесь всю проблему, потому что, возможно, у кого-то есть лучшее решение для «использования словаря данных».
bind_rows()
? Для переименования можно было сделатьnames(x) <- true_names[names(x)]
. Или вы можете попробовать github.com/hughjonesd/rumpel ;-) - person dash2   schedule 09.05.2021