重命名R

时间:2018-10-16 09:40:39

标签: r dataframe rename

感觉应该很简单!抱歉,如果我没有找到明显的答案-我在搜索时没有找到答案。

我合并了两组数据-假设一组与新妈妈有关,另一组与婴儿有关。在其原始数据框中,他们没有在列中指定是母亲还是婴儿,但现在将它们合并在一起,对于某些列,有必要指定它们以避免混淆。我不一定要对所有列都执行此操作,因为在某些情况下它很明显,并且会使列名过长和笨拙,而在另一些情况下,它们与两者都相关。

例如我有类似这样的内容,除了有更多的列:

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

当然,可以有一种不需要功能的方法!

2 个答案:

答案 0 :(得分:2)

带有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_", .))

答案 1 :(得分:0)

使用rename_at()vars()matches()的另一种方法

library(dplyr)
births_df <- births_df %>% 
  rename_at(vars(matches("first_name|age")), ~ str_replace(., "^", "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

我们找到与first_nameage匹配的任何列,然后在字符串的开头使用str_replace()添加mother_。这种方法在这种情况下有效。