Como alterar os nomes das colunas no quadro de dados no R? [fechadas]

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

A partir disso, sei que o nome da coluna / variável "name" do quadro de dados mydat é substituído por "newname".

Minha pergunta é se, eu quero fazer isso por um loop, para que eu tenha algo como:

newname1 newname2 newname3 newname4 e assim por diante, como faço isso?

Isto é o que fez e não funcionou:

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

Existe uma maneira de codificar isso? muito obrigado a todos que poderiam ser de ajuda. Owusu Isaac

Filho
fonte
4
Esta questão parece estar fora de tópico, porque é puramente sobre programação.
gung - Restabelece Monica
Se você precisar renomear alguns nomes de variáveis feios (por exemplo, abcde_1_1, abcde_2_2, abcde_3_3 ...) como freqüentemente acontece em alguns conjuntos de dados baixados do Qualtrics: ugly_vars <- names(dplyr::select(df, starts_with("abcde_"))) names(ESM_df[ugly_vars]) <- str_c("abc_", 1:length(ugly_vars))
jetlag

Respostas:

10

A solução mais óbvia seria alterar seu código no loop for com o seguinte:

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

Mas você precisa esclarecer qual é a sua variável name. No momento, esse loop fará 4 renomeações da coluna única.

Em geral, se os nomes que você deseja alterar estiverem em vetor, este é um procedimento de subconjunto padrão:

 names(mydat)[names(mydat)%in% names_to_be_changed] <- name_changes
mpiktas
fonte
Olá Mpiktas, sua solução funciona de forma excelente. Muito Obrigado. e obrigado a todos bem
Filho
11
@Owusu, a expressão de gratidão neste site é voto positivo das respostas e sua aceitação. Veja o FAQ . De qualquer forma, feliz em ser útil.
Mvctas #
6

Tente usar sprintfou paste, assim:

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

Além disso, observe que isso names(mydat)[c(name)]é um absurdo mais ou menos; c(name)é equivalente a escrever justamente namee significa "obter o valor da variável chamada name'; bracket extrairá pelo menos elementos de, names(mydat)mas somente se a namevariável contiver um índice numérico ou booleano.

Se você deseja substituir as colunas chamadas namepor name1, name2, ..., nameN, use algo como isto:

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

EDIT: Bem, se você apenas deseja remover nomes de colunas duplicados, existe uma maneira ainda mais fácil; R tem uma make.namesfunção que corrige esse problema; pode ser usado assim:

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

Ainda mais curto, o mesmo pode ser obtido apenas escrevendo:

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

fonte
@mbq, == faz correspondência parcial para strings?
mpiktas
@mpiktas Não, mas apenas a correspondência exata é necessária aqui. greplseria bom fazer o trabalho mais geral.
@mbq, sim, mas isso pressupõe que existem várias colunas com o mesmo nome. R permite isso, mas tento evitar o uso desse recurso.
mpiktas
@mpiktas Aparentemente, o mesmo acontece com o OP, portanto, esta questão.
@mbq obrigado por esclarecer a confusão com os nomes (mydat) [c (nome)] Desde que o OP escreveu, eu sei que a coluna / nome da variável "name" era como "uau, isso é possível?" e tentou acessar os nomes pelo nome ... me idiota;). Posso sugerir humildemente editar a pergunta?
steffen
5

Eu tive o mesmo problema e resolvi-o com este código:

names(mydat) <- paste("newname", 1:ncol(mydat), sep="");
cuong
fonte