我正在尝试使用assign函数重命名时间系列的列,如下所示 -
assign(colnames(paste0(<logic_to_get_dataset>)),
c(<logic_to_get_column_names>))
我收到警告:In assign(colnames(get(paste0("xvars_", TopVars[j, 1], "_lag", :
only the first element is used as variable name
另外,列名称分配不会发生。我认为这是因为colnames()函数而发生的。有解决方法吗?
答案 0 :(得分:0)
问题是,assign只会查看向量的第一个元素。
您可以尝试这样做,例如:
df = data.frame(x = 1:3, y = 4:2)
within(df, assign(colnames(df),c('a','b'))
您会注意到R只查看第一个变量,并尝试将这些列名称描述的值重新分配给第二个值。这种行为显然不是你想要的。
不幸的是,这是一种hackey,但你可以随时使用这样的东西
data.frame.name = get_df()#some function that returns text
data.frame.columns = get_cols()#some function that returns text
eval(parse(text = paste0('colnames(',data.frame.name,') = c(',
paste(data.frame.columns,collapse = ','),')')))
我更愿意避免使用这些表达式,但它应该按预期工作。
答案 1 :(得分:0)
在这里 -
temp_var <- paste0('colnames(var_',TopLines[j,1],'_lag',get(paste0('uniqLg_',TopLines[j,1]))[k,],'_',get(paste0('uniqLg_',TopLines[j,1]))[k,]+12 ,
') <- c(gsub( "xt',get(paste0('uniqLg_',TopLines[j,1]))[k,],'" , "xt',get(paste0('uniqLg_',TopLines[j,1]))[k,],'__',get(paste0('uniqLg_',TopLines[j,1]))[k,]+12,
'", colnames(var_',TopLines[j,1],'_xt',get(paste0('uniqLg_',TopLines[j,1]))[k,],')))')
print(temp_var )
eval(parse( text=temp_var ))
其中TopLines是一个包含一列并包含行列表的数据框。这个方法的唯一问题是,除非我实际打开数据集并查看更改是否受到影响,否则我无法测试eval的输出。