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