Изменить имена столбцов df именованных фреймов данных - PullRequest
2 голосов
/ 12 декабря 2011

Я пытаюсь создать скрипт, который будет перебирать некоторые фреймы данных и изменять имена их столбцов на строчные.

firmNames <- c("file1","file2","file3","file4","file5")
for(i in 1:length(firmNames)){
    fileName <- paste("data/",firmNames[i],".RData",sep="")
    load(fileName)
    upper <- names(get(firmNames[i]))
    lower <- tolower(upper)  # transforms to lower case
    names(get(firmNames[i])) <- lower  # This is the offending line
    save(get(firmNames[i]), file = fileName)
}

Это вызывает синтаксическую ошибку:

Error in names(get(firmNames[i])) <- lower : 
could not find function "get<-"

Если я использую assign, он все равно не работает:

Error in save(get(firmNames[i]), file = fileName) : 
object ‘get(firmNames[i])’ not found
In addition: Warning message:
In assign(names(get(firmNames[i])), lower) :
only the first element is used as variable name

Как ни странно, печать names(get(firmNames[i])) отображается отлично, как и lower. Они оба из режима персонажа. Чего мне не хватает?

1 Ответ

2 голосов
/ 12 декабря 2011

Простое, удобочитаемое и сохраняющее здравомыслие решение состоит в том, чтобы назначить data.frame, который вы хотите изменить, временному объекту (здесь он называется X). Поработайте над этим, и когда вы получите его в форме, замените оригинальный объект на правильно измененный:

# SETUP
firmNames <- c("file1","file2","file3","file4","file5")
file1 <- data.frame(ALLIGATOR=1:4, BLUEBIRD=rnorm(4))

file1
#   ALLIGATOR    BLUEBIRD
# 1         1 -0.37122263
# 2         2 -0.13939213
# 3         3 -0.79044157
# 4         4 -0.06837244


# MODIFY COLUMN NAMES
for (i in 1) {
    X <- get(firmNames[i])
    names(X) <- tolower(names(X))
    assign(firmNames[i], X)
}

file1
#   alligator    bluebird
# 1         1 -0.37122263
# 2         2 -0.13939213
# 3         3 -0.79044157
# 4         4 -0.06837244
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...