感觉应该很简单!抱歉,如果我没有找到明显的答案-我在搜索时没有找到答案。
我合并了两组数据-假设一组与新妈妈有关,另一组与婴儿有关。在其原始数据框中,他们没有在列中指定是母亲还是婴儿,但现在将它们合并在一起,对于某些列,有必要指定它们以避免混淆。我不一定要对所有列都执行此操作,因为在某些情况下它很明显,并且会使列名过长和笨拙,而在另一些情况下,它们与两者都相关。
例如我有类似这样的内容,除了有更多的列:
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
当然,可以有一种不需要功能的方法!
答案 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_name
或age
匹配的任何列,然后在字符串的开头使用str_replace()
添加mother_
。这种方法在这种情况下有效。