names(mydat)[c(name)]<-c("newname")
Исходя из этого, я знаю, что имя столбца / переменной «имя» фрейма данных mydat заменяется на «новое имя».
Мой вопрос, если я хочу сделать это с помощью цикла, чтобы у меня было что-то вроде:
newname1 newname2 newname3 newname4 и так далее, как мне это сделать?
Это то, что сделал, и это не сработало:
for(i in 1:4){
names(mydat)[c(name)]<-c("newname"i)
}
Есть ли способ закодировать это? Большое спасибо всем, кто мог бы помочь. Овусу Исаак
ugly_vars <- names(dplyr::select(df, starts_with("abcde_")))
names(ESM_df[ugly_vars]) <- str_c("abc_", 1:length(ugly_vars))
Ответы:
Наиболее очевидным решением было бы изменить ваш код для цикла следующим образом:
Но вам нужно уточнить, что ваша переменная
name
. На данный момент этот цикл будет делать 4 переименования одного столбца.В общем, если имена, которые вы хотите изменить, находятся в векторе, это стандартная процедура поднабора:
источник
Попробуйте использовать
sprintf
илиpaste
, как это:Также обратите внимание, что
names(mydat)[c(name)]
это более-менее глупость;c(name)
эквивалентно записи justname
и означает «получить значение переменной с именемname
»; скобка будет по крайней мере извлекать элементы,names(mydat)
но только еслиname
переменная содержит числовой или логический индекс.Если вы хотите заменить столбцы , называемые
name
сname1, name2, ..., nameN
, использовать что - то вроде этого:РЕДАКТИРОВАТЬ: Ну, если вы просто хотите удалить дублированные имена столбцов, есть еще более простой способ; R имеет
make.names
функцию, которая решает эту проблему; это можно использовать так:Короче, то же самое можно получить, только написав:
источник
grepl
было бы хорошо, чтобы сделать более общую работу.У меня была та же проблема, и я решил ее с помощью этого кода:
источник