R:如何一次将列名更改应用于多个数据框?

时间:2018-02-18 22:09:39

标签: r dataframe rename multiple-columns

我正在尝试替换超过100个数据框的列标题中的某些单词。我有一个完美的字符串:

names(singledataframe) <- gsub(x = names(singledataframe), pattern = "Int'l", 
replacement = "International") 

我正在尝试将此应用于我所制作的所有画面。我使用c()在AllFrames下引用它们。我试图创建一个在一个帧上工作的字符串的函数,并将其应用于AllFrames,并带有for循环。

ChangeName1 <- function(singledataframe) {
  gsub(x = names(singledataframe), pattern = "Int'l", replacement = "International") 
  }

然后像:

for (i in 1:length(names(AllFrames))) {lapply(i, ChangeName1)
}

我没有错误,但随机检查各个框架显示没有采取预期的效果。我尝试了很多变化,但我被卡住了!我想也许我需要以更好的方式编辑引用AllFrames的c()。

  • 如果有任何不清楚或我通常发布错误,我道歉。这是我的第一次,这一切都是新的两个我。提前感谢您提供的任何指导或帮助。

1 个答案:

答案 0 :(得分:2)

您没有从功能中分配和返回已更改的data.frame。尝试:

ChangeName1 <- function(singledataframe) {
    names(singledataframe) <- gsub(
        x = names(singledataframe), 
        pattern = "Int'l", 
        replacement = "International");
    return(singledataframe);
}

更新

我们假设您的data.frame存储在list中;我将使用一些随机生成的数据:

set.seed(2017);
lst <- list(
    data.frame(rnorm(10), rnorm(10)),
    data.frame(rnorm(10), rnorm(10)));
lst <- lapply(lst, function(x) { colnames(x) <- c("A", "Int'l"); x });
#[[1]]
#              A      Int'l
#1   1.434201478  0.3427681
#2  -0.077291959  1.5724254
#3   0.739137231 -0.7467347
#4  -1.758604727  0.3066498
#5  -0.069825227 -1.4304858
#6   0.451905527  1.1944265
#7  -1.958366456 -0.4820681
#8  -0.001524259  1.3178624
#9  -0.265336001 -1.1298316
#10  1.563222619 -0.9263514
#
#[[2]]
#             A      Int'l
#1   0.14070941 -0.6831744
#2  -0.85223255  0.2410894
#3   1.90339718  0.5894319
#4  -1.64818594 -0.9306249
#5   0.75962477  0.2974619
#6   0.06229087  3.1372771
#7  -0.38903119 -1.0275347
#8   0.63666563  1.9418028
#9  -0.86778544 -0.2779562
#10  0.09873361 -0.2215888

然后我们可以lapply将函数changeName1添加到所有list元素中:

lapply(lst, ChangeName1);
#[[1]]
#              A International
#1   1.434201478     0.3427681
#2  -0.077291959     1.5724254
#3   0.739137231    -0.7467347
#4  -1.758604727     0.3066498
#5  -0.069825227    -1.4304858
#6   0.451905527     1.1944265
#7  -1.958366456    -0.4820681
#8  -0.001524259     1.3178624
#9  -0.265336001    -1.1298316
#10  1.563222619    -0.9263514
#
#[[2]]
#             A International
#1   0.14070941    -0.6831744
#2  -0.85223255     0.2410894
#3   1.90339718     0.5894319
#4  -1.64818594    -0.9306249
#5   0.75962477     0.2974619
#6   0.06229087     3.1372771
#7  -0.38903119    -1.0275347
#8   0.63666563     1.9418028
#9  -0.86778544    -0.2779562
#10  0.09873361    -0.2215888