Упрощенный способ переименования нескольких столбцов в R - PullRequest
0 голосов
/ 16 октября 2018

Такое ощущение, что это должно быть довольно просто!Извиняюсь, если мне не хватает очевидного ответа - я не нашел его при поиске.

Я объединил два набора данных - скажем, один касается новых матерей, а другой - детей.В своих исходных данных они не указывали в столбцах, были ли они матерями или младенцами, но теперь они объединены, для некоторых столбцов стоит указать, чтобы избежать путаницы.Я не обязательно хочу делать это для ВСЕХ столбцов, потому что в некоторых случаях это очевидно и делает имя столбца слишком длинным и неуклюжим, а в других они относятся к обоим.

Так, например, у меня есть что-то вроде этого, за исключением гораздо большего количества столбцов:

family <- c("Ali", "Baker", "Cruz")
sex <- c("FEMALE", "MALE", "FEMALE")
first_name <- c("Aylin", "Betty", "Camila")
age <- c(30, 27, 36)
area <- c("Aberdeen", "Birmingham", "Cardiff")


births_df <- data.frame(family, sex, first_name, age, area)

В этом примере первый и последний столбцы относятся к обеим сторонам, второй к ребенкуа остальное маме.

Я хочу переименовать столбцы 3 и 4, чтобы они говорили «mother_» перед существующим именем столбца.

Очевидно, что я могу сделать это индивидуально, как показано ниже, но это не совсем реально, если мне придется повторить это для большого количества столбцов.

births_df <- rename(births_df, c("first_name" = "mother_first_name", 
                                 "age" = "mother_age"
                                 ))

Я попытался написать функцию длясделать это:

rename_cols_mother <- function(data_f, column_name) {
  plyr::rename(data_f, c(column_name = paste("staff_", column_name)))
    }

Однако я довольно плохо знаком с функциями, и я явно делаю что-то не так, когда я получаю следующую ошибку, когда пытаюсь затем использовать функцию:

births_df <- rename_cols_mother(births_df, c("first_name", "age"))

Следующие from значения отсутствовали в x: column_name1, column_name2

И, конечно, может быть способ сделать это без необходимости использования функции!

1 Ответ

0 голосов
/ 16 октября 2018

с dplyr:

library(dplyr)
births_df %>% rename_at(3:4,~paste0("mother_", .))
#   family    sex mother_first_name mother_age       area
# 1    Ali FEMALE             Aylin         30   Aberdeen
# 2  Baker   MALE             Betty         27 Birmingham
# 3   Cruz FEMALE            Camila         36    Cardiff

Также работают:

births_df %>% rename_at(c("first_name", "age"),~paste0("mother_", .))
births_df %>% rename_at(vars(first_name, age),~paste0("mother_", .))
...