Eu tenho um quadro de dados chamado "newprice" (veja abaixo) e quero alterar os nomes das colunas no meu programa em R.
> newprice
Chang. Chang. Chang.
1 100 36 136
2 120 -33 87
3 150 14 164
De fato, é isso que estou fazendo:
names(newprice)[1]<-paste("premium")
names(newprice)[2]<-paste("change")
names(newprice)[3]<-paste("newprice")
Não coloquei isso em loop porque quero que o nome de cada coluna seja diferente, como você vê.
Quando colo meu programa no console do R, esta é a saída que ele me fornece:
> names(newprice)[1]<-paste(“premium”)
Error: unexpected input in "names(newprice)[1]<-paste(“"
> names(newprice)[2]<-paste(“change”)
Error: unexpected input in "names(newprice)[2]<-paste(“"
> names(newprice)[3]<-paste(“newpremium”)
Error: unexpected input in "names(newprice)[3]<-paste(“"
Tentei igualmente usar a c()
função - por exemplo c("premium")
, em vez da paste()
função, mas sem sucesso.
Alguém poderia me ajudar a descobrir isso?
is.matrix
oustr
.colnames(newprice)<- c("premium","change","newprice")
Respostas:
Use a
colnames()
função:Você também pode definir um subconjunto:
fonte
colnames(X)[c(1,2)] <- c("good", "better")
setnames()
nodata.table
pacote. Use algo comosetnames(DT,"b","B")
ousetnames(DT,c("a","E"),c("A","F"))
q1
, tentando transformar o quadro de dados usandodplyr
como emq1 <- q1 %>% mutate(rel_count = count / 482462)
resultados no erroError in mutate_impl(.data, dots) : unknown column 'days'
(ondedays
é um novo nome dado à coluna). Isso é realmente frustrante.Eu uso isso:
fonte
O erro é causado pelas "aspas inteligentes" (ou como elas são chamadas). A lição aqui é: "não escreva seu código em um 'editor' que converte aspas em aspas inteligentes".
Além disso, você não precisa
paste("premium")
(a chamada parapaste
é redundante) e é uma boa ideia colocar espaços<-
para evitar confusão (por exemplox <- -10; if(x<-3) "hi" else "bye"; x
).fonte
Você tentou apenas:
names(newprice)[1]<-"premium"
?
fonte
A nova maneira recomendada de fazer isso é usar a
setNames
função Veja?setNames
. Como isso cria uma nova cópia dodata.frame
, certifique-se de atribuir o resultado ao originaldata.frame
, se essa for sua intenção.As versões mais recentes do R alertam você se você usar
colnames
algumas das maneiras sugeridas pelas respostas anteriores.Se fosse esse o caso
data.table
, você poderia usar adata.table
funçãosetnames
, que pode modificar nomes de colunas específicos ou um único nome de coluna por referência :fonte
Eu tive o mesmo problema e esse código funcionou para mim.
Em resumo, esse código faz o seguinte:
names(data)
examina todos os nomes no dataframe (data
)[names(data) == oldVariableName]
extrai o nome da variável (oldVariableName
) que você deseja renomear e<- "newVariableName"
atribui o novo nome da variável.fonte
Semelhante aos outros:
Muito simples e fácil de modificar.
fonte
tentar:
fonte
Se você precisar renomear não todas, exceto várias colunas de uma só vez, quando souber apenas os nomes das colunas antigas, poderá usar a
colnames
função e o%in%
operador. Exemplo:Agora você deseja alterar "ruim" e "pior" para "bom" e "melhor". Você pode usar
Isto resulta em
fonte
Use isso para alterar o nome da coluna pela função colname.
fonte
Você pode apenas fazer a edição:
e altere o nome da coluna manualmente.
fonte
> locanatmodelset<-edit(locanatmodelset) Error in edit.data.frame(locanatmodelset) : can only handle vector and factor elements
O nome da minha coluna é como abaixo
Quero alterar o nome da coluna Classe e Sexo
fonte
Existem algumas opções com
dplyr::rename()
edplyr::select()
:Há também três variantes no escopo de
dplyr::rename()
:dplyr::rename_all()
para todos os nomes de coluna,dplyr::rename_if()
para direcionar condicionalmente nomes de coluna edplyr::rename_at()
para selecionar colunas nomeadas. O exemplo a seguir substitui espaços e pontos por um sublinhado e converte tudo para minúsculas:dplyr::select_all()
também pode ser usado de maneira semelhante:fonte
Apenas para corrigir e estender um pouco a resposta de Scott Wilson.
Você também pode usar a
setnames
função data.table em data.frames.Não espere acelerar a operação, mas você pode esperar
setnames
que seja mais eficiente para o consumo de memória, pois atualiza os nomes das colunas por referência. Isso pode ser rastreado com aaddress
função, veja abaixo.Portanto, se você estiver atingindo seus limites de memória, considere usá-lo.
fonte
Isso pode ser útil:
fonte
Caso tenhamos 2 quadros de dados, os seguintes trabalhos
Mudamos os nomes do DF1 da seguinte maneira
fonte