我想用名称功能重命名一堆数据帧但不能使用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
}
两种选择都不起作用,因为它说我正在比较长度不均匀的矢量。我一定错过了一些明显的东西。感谢
答案 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"