使用 assign() 函数将列名分配给 R 中的空数据框

Use assign() function to assign column names into an empty data frame in R

我有一个空数据框,其名称是由 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 分配给数据框:"paste0(x,y)" ?

assign(colnames(paste0(x,y)),col_names)

我试过了,但没有成功。 有什么办法可以解决这个问题吗? 非常感谢!

您可以在 assign 语句中包含对 setNames 的调用:

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

如果您已经创建了数据集,则可以使用通用替换函数 names<- 将数据集的现有列名称更改为 'col_names' 向量中的名称。

assign(paste0(x,y), `names<-`(get(paste0(x,y)), col_names))

您遇到的困难(我如何在后面的代码中引用使用动态生成的名称创建的对象)正是 assign 不是一个好主意的原因。您的问题实际上是 引起的 ,因为您希望使用 assign

将数据框放入具有非动态变量名称的列表中,并使用 "dynamic" 元素设置列表元素的名称:

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)