使用name()重命名数据帧组的列

时间:2014-06-26 19:55:30

标签: r dataframe lapply

我想用名称功能重命名一堆数据帧但不能使用lapply或loop。

我有一组数据框名称为qcew.2007,qcew.2014等...我有一个名字的向量我希望所有的数据框都有。他们都是一样的。该向量是名称colnm:

colnm = c("area_fips" , "own_code", "industry_code", "agglvl_code") # example shortened
 # groups has names of all data frames and goes to 2013
group =c("qcew.2007", "qcew.2008", "qcew.2009") 
    # using lapply
    names <- lapply(group, function(d){
     n = paste0(d)
     names(n) = colnm
    })
# using loop does not work either
   for (i in seq(group)) {
   names(group[[i]]) = colnm 
}   

两种选择都不起作用,因为它说我正在比较长度不均匀的矢量。我一定错过了一些明显的东西。感谢

2 个答案:

答案 0 :(得分:0)

你走了。您需要使用get,否则您要为group中的字符向量指定名称:

# sample data
qcew.2007 <- data.frame(a=1, b=2, c=3, d=4)
qcew.2008 <- data.frame(a=3, b=4, c=5, d=6)
qcew.2009 <- data.frame(a=5, b=6, c=7, d=8)    


for(i in 1:3)
    assign(group[i], `names<-`(get(group[i]), colnm))
names(qcew.2007)
# [1] "area_fips"     "own_code"      "industry_code" "agglvl_code"  
names(qcew.2008)
# [1] "area_fips"     "own_code"      "industry_code" "agglvl_code"  
names(qcew.2009)
# [1] "area_fips"     "own_code"      "industry_code" "agglvl_code"

在这里,您使用get获取group中每个位置中命名的对象,然后使用assign将修改后的对象(通过更改列名修改)重新分配回该命名对象

答案 1 :(得分:0)

此外:

 list2env(lapply(mget(group), setNames, colnm),envir=.GlobalEnv)

 names(qcew.2007)
 #[1] "area_fips"     "own_code"      "industry_code" "agglvl_code"