【问题标题】:Problems with renaming columns via variables in R通过 R 中的变量重命名列的问题
【发布时间】:2020-08-30 03:11:44
【问题描述】:

我遇到了一个特定问题我有一个包含大量矩阵的数据集,这些矩阵都以V1 作为列名,基本上是 NULL。我正在尝试编写一个循环来用列表中的列名替换所有这些,但我遇到了一些问题。

为了把它分解成最简单的形式,这段代码没有像我期望的那样运行。

nameofmatrix <- paste('column_', i, sep = "")
colnames(eval(as.name(nameofmatrix))) <- c("test")

我希望这会以 column_1 的值为例,并将(在第 2 行中)替换为“test”作为列名。

我试图把它分解得更小,例如,如果我运行print(eval(as.name(nameofmatrix)),我会按预期打印对象的列/行,如果我运行print(colnames(eval(as.name(nameofmatrix))),我会得到列标题预期的NULL(因为它被设置为V1)。

我什至尝试手动输入列名,例如colnames(column_1) &lt;- c("test),这成功地重命名了列。但是,一旦将这个变量放在文本的位置,如上所示,它的工作方式就不一样了。在使用此方法创建多个矩阵列后,我很难找到有关如何重命名多个矩阵列的解决方案。有人有什么意见或建议吗?

注意,我在尝试运行时收到的错误是

Error in eval([as.name](nameofmatrix)) <- \`vtmp\` :  could not find function "eval<-"

【问题讨论】:

    标签: r


    【解决方案1】:

    我们可以使用get返回列表中对象的值(如果有多个对象使用mget,然后重命名list中的对象并使用list2env更新全局环境中的这些对象

    list2env(lapply(mget(nameofmatrix), function(x) {colnames(x) <- newnames
                 x}), .GlobalEnv)
    

    也可以用assign完成

    data(mtcars)
    nameofobject <- 'mtcars'
    assign(nameofobject, `colnames<-`(get(nameofobject), 
         c('mpg1', names(mtcars)[-1])))
    

    现在,检查“mtcars”的names

    names(mtcars)[1]
    #[1] "mpg1"
    

    【讨论】:

    • 关于如何在多列中使用 list2env 有什么建议吗? @akrun
    • @wolfeyes90 在 colnames(x) 中将其更改为您要更改的索引,即如果您想按该顺序更改第 1 列到第 5 列和第 8 列 colnames(x)[c(1:5, 8)] &lt;- yournewvectorofcolumnnames
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-07
    • 1970-01-01
    • 2019-05-22
    • 2021-07-18
    相关资源
    最近更新 更多