在循环中,使用{i}作为文本,或更改循环/ lapply中的列名称

时间:2017-05-30 18:58:02

标签: r

我需要更改具有相同名称结构的多个数据帧的列名称。我想使用一个循环,但我一直有同样的问题。所以我愿意使用lapply或其他任何东西:

这就是我想要的:

SwingWorker

这是我的尝试:

colnames(gom2)<-c(paste("d2", colnames(gom2),sep="_"))
colnames(gom3)<-c(paste("d3", colnames(gom3),sep="_"))
colnames(gom4)<-c(paste("d4", colnames(gom4),sep="_"))
colnames(gom5)<-c(paste("d5", colnames(gom5),sep="_"))
colnames(gom6)<-c(paste("d6", colnames(gom6),sep="_"))

我知道这段代码有误,但我不能将{i}作为文本来处理它。只要直观,我就可以使用任何解决方案。我已经看过其他解决方案,并尝试过,但没有取得多大成功,也无法理解他们在做什么。 谢谢!

2 个答案:

答案 0 :(得分:0)

这可能会满足您的需求。

    geneid  fdr_new fdr_old
gene1   4.66E-05    1.45E-05
gene2   0.059650791 0.043799129
gene3   0.04405402  0.061581326
gene4   0.032286852 0.088522898
gene5   0.025672937 0.004911527
gene6   0.001094006 0.000229285
gene7   0.098444488 0.002132802
gene8   0.006079767 0.000230392
gene9   0.000117813 0.000894136
gene10  0.004925041 0.002640812
gene11  0.00036314  5.46E-05
gene12  0.026337682 0.018557193
gene13  0.001503366 0.004951799
gene14  3.05E-05    4.37E-06
gene15  0.001006888 0.009248765
gene16  8.11E-05    0.006124903
gene17  0.062408836 0.026734781
gene18  0.09637641  0.097559967
gene19  0.00405273  0.075971307
gene20  0.078261356 0.080722817
gene21  0.033206859 0.019133673
gene22  0.029851363 0.037940196

答案 1 :(得分:0)

我会尝试这样的事情:

for (i in 2:6){
    df<- paste0("gom", i)
    colnames(eval(parse(text=df)))<- paste("d", i, colnames(eval(parse(text=df))), sep="_")
}

我们使用paste0为每个i创建数据框的名称。然后函数evalparse首先解析字符向量,即在这种情况下为df,然后对其进行求值。

顺便说一下,我认为gom{i}旨在表示gom2, gom3等,而d{i}应该称为d1, d2等,但它无法正常工作