2

我有多个名为 y1 到 y13 的数据框 - 每列一列。它们都有一个列名,我想将其更改为“Date.Code”。我在 for 循环中尝试了以下内容:

for(i in 1:13){
  colnames(get(paste("y", i, sep=""))) <- c("Date.Code")
}

那没有用。

我也试过:

for(i in 1:13){
  assign(("Date.Code"), colnames(get(paste("y", i, sep=""))))
}

也没有运气。

有什么建议么?

谢谢, 乙

4

2 回答 2

3

这里的困难是您不能get直接与赋值运算符一起使用,
例如,get(nm) <- value 不会工作。您可以尝试使用assign,但方式略有不同。

假设cn是您要更改其名称的列号

for(i in 1:13){
   nm <- paste0("y", i)
   tmp <- get(nm)
   colnames(tmp)[cn] <- c("Date.Code")
   assign(nm, tmp)
}



话虽如此,解决此问题的一种更简洁的方法是将所有 DF 收集到一个列表中,然后您可以轻松地使用lapply它们来操作它们。例如:

# collect all of your data.frames into a single list. 
df.list <- lapply(seq(13), function(i) get(paste0("y", i)))

# now you can easily change column names. Note the `x` at the end of the function which serves
#    as a return of the value. It then gets assigned back to an object `df.list`
df.list  <- 
  lapply(df.list, function(x) {colnames(x)[cn] <- "Date.Code";   x})

最后,搜索这些板[r] data.table,您将看到许多通过引用更改值和更直接地设置属性的选项。

于 2013-07-14T21:26:01.577 回答
2

这里有一个班轮解决方案:

list2env(lapply(mget(ls(pattern='y[0-9]+')),
       function(x) setNames(x,"Date.Code")),.GlobalEnv)

当然,最好将所有变量保存在同一个列表中。

于 2013-07-14T21:42:31.813 回答