使用assign()函数将列名分配到R

时间:2015-10-02 14:24:29

标签: r assignment-operator

我有一个空数据框,其名称由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)

我试过这个,但徒劳无功。 有什么方法可以解决这个问题吗? 非常感谢!

3 个答案:

答案 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