我有一个空数据框,其名称由assign()函数创建。
x <- "Sale"
y <- "2015"
col_names <- c("Q1","Q2","Q3")
assign(paste0(x,y), data.frame(matrix(nrow = 0, ncol = length(col_names))))
x,y和col_names的内容是动态的。 我应该如何为数据框分配col_names:&#34; paste0(x,y)&#34; ?
assign(colnames(paste0(x,y)),col_names)
我试过这个,但徒劳无功。 有什么方法可以解决这个问题吗? 非常感谢!
答案 0 :(得分:2)
如果您已经创建了数据集,则可以使用通用替换函数names<-
来更改数据集的现有列名称,其中包含&#39; col_names&#39;向量。
assign(paste0(x,y), `names<-`(get(paste0(x,y)), col_names))
答案 1 :(得分:2)
您遇到的困难(我如何在以后的代码中引用使用动态生成的名称创建的对象)正是assign
一个坏主意的原因。您希望使用assign
,实际上造成问题。
将数据框放在具有非动态变量名称的列表中,并使用&#34; dynamic&#34;设置列表中该元素的名称。元素:
a <- list(setNames(data.frame(matrix(nrow = 0, ncol = length(col_names))),col_names))
names(a) <- paste0(x,y)
> a
$Sale2015
[1] Q1 Q2 Q3
<0 rows> (or 0-length row.names)
答案 2 :(得分:1)
您可以在setNames
声明中包含对assign
的来电:
assign(paste0(x,y),
setNames(data.frame(matrix(nrow = 0, ncol = length(col_names))),
col_names)
示例:强>
assign("dfa", setNames(data.frame(1:3), "col1"))
> dfa
# col1
#1 1
#2 2
#3 3