Как изменить имена столбцов в кадре данных в R? [закрыто]


9
 names(mydat)[c(name)]<-c("newname") 

Исходя из этого, я знаю, что имя столбца / переменной «имя» фрейма данных mydat заменяется на «новое имя».

Мой вопрос, если я хочу сделать это с помощью цикла, чтобы у меня было что-то вроде:

newname1 newname2 newname3 newname4 и так далее, как мне это сделать?

Это то, что сделал, и это не сработало:

for(i in 1:4){
names(mydat)[c(name)]<-c("newname"i)
}

Есть ли способ закодировать это? Большое спасибо всем, кто мог бы помочь. Овусу Исаак


4
Этот вопрос, кажется, не по теме, потому что он касается только программирования.
gung - Восстановить Монику

Если вам нужно переименовать некоторые уродливые имена переменных (например, abcde_1_1, abcde_2_2, abcde_3_3 ...), как это часто происходит в некоторых наборах данных, загружаемых из Qualtrics: ugly_vars <- names(dplyr::select(df, starts_with("abcde_"))) names(ESM_df[ugly_vars]) <- str_c("abc_", 1:length(ugly_vars))
JetLag

Ответы:


10

Наиболее очевидным решением было бы изменить ваш код для цикла следующим образом:

   names(mydat)[c(name)] <- paste("newname",i,sep="")

Но вам нужно уточнить, что ваша переменная name. На данный момент этот цикл будет делать 4 переименования одного столбца.

В общем, если имена, которые вы хотите изменить, находятся в векторе, это стандартная процедура поднабора:

 names(mydat)[names(mydat)%in% names_to_be_changed] <- name_changes

Здравствуйте, Mpiktas, ваше решение работает отлично. огромное спасибо. и спасибо всем также
Сын

1
@ Owusu, выражение благодарности на этом сайте - голосование за ответы и их принятие. Смотрите FAQ . В любом случае, рад быть полезным.
mpiktas

6

Попробуйте использовать sprintfили paste, как это:

names(mydat)<-sprintf("name%d",1:10)

Также обратите внимание, что names(mydat)[c(name)]это более-менее глупость; c(name)эквивалентно записи just nameи означает «получить значение переменной с именем name»; скобка будет по крайней мере извлекать элементы, names(mydat)но только если nameпеременная содержит числовой или логический индекс.

Если вы хотите заменить столбцы , называемые nameс name1, name2, ..., nameN, использовать что - то вроде этого:

names(mydat)[names(mydat)=="name"]<-sprintf("name%d",1:sum(names(mydat)=="name"))

РЕДАКТИРОВАТЬ: Ну, если вы просто хотите удалить дублированные имена столбцов, есть еще более простой способ; R имеет make.namesфункцию, которая решает эту проблему; это можно использовать так:

names(mydat)<-make.names(names(mydat),unique=TRUE)

Короче, то же самое можно получить, только написав:

data.frame(mydat)->mydat #The magic is in check.names, but it is TRUE by default

@mbq, == частичное совпадение для строк?
mpiktas

@mpiktas Нет, но здесь требуется только точное соответствие. greplбыло бы хорошо, чтобы сделать более общую работу.

@mbq, да, но это предполагает, что есть несколько столбцов с одинаковым именем. R позволяет это, но я стараюсь избегать использования этой функции.
mpiktas

@mpiktas Очевидно, что и ОП, таким образом, этот вопрос.

@mbq спасибо за разъяснение путаницы с названиями (mydat) [с (имя)] Так как OP написал я знаю , что / имя переменной «имя» колонке я был как «ничего себе , что это возможно?» и пытался получить доступ к именам по имени ... тупой меня;). Могу ли я смиренно предложить отредактировать вопрос?
Штеффен

5

У меня была та же проблема, и я решил ее с помощью этого кода:

names(mydat) <- paste("newname", 1:ncol(mydat), sep="");
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.