No R, como você adiciona uma nova linha a um quadro de dados depois que o quadro de dados já foi inicializado?
Até agora eu tenho o seguinte:
df <- data.frame("hi", "bye")
names(df) <- c("hello", "goodbye")
#I am trying to add "hola" and "ciao" as a new row
de <- data.frame("hola", "ciao")
merge(df, de) # Adds to the same row as new columns
# Unfortunately, I couldn't find an rbind() solution that wouldn't give me an error
Qualquer ajuda seria apreciada
de
também.names(de) <- c("hello","goodbye")
erbind
rbind(df, setNames(de, names(df)))
rbind(data.frame(a = 1), data.frame(b = 2))
.. por que você quer? Eu espero que isso gere um erro independentemente. É como se estivessemerge
com umaby
variável aleatória . E isso é 2015, todo mundo não defineoptions(stringsAsFactors = FALSE)
?stringsAsFactors=FALSE
pode ser uma solução rápida, mas alterar os padrões que outras pessoas definirão de maneira diferente pode realmente arruinar um dia.Respostas:
Como @Khashaa e @Richard Scriven apontam nos comentários, você deve definir nomes de colunas consistentes para todos os quadros de dados que deseja anexar.
Portanto, você precisa declarar explicitamente os nomes das colunas para o segundo quadro de dados
de
e depois usá-lorbind()
. Você define apenas os nomes das colunas para o primeiro quadro de dadosdf
:fonte
newdf<-rbind(df, data.frame(hello="hola", goodbye="ciao"))
OR com variável:newdf<-rbind(df, data.frame(hello=var1, goodbye=var2))
Vamos simplificar:
fonte
df[nrow(df) + 1, 1:2] = c("v1", "v2")
edf[nrow(df), 3] = 100
Mas ainda assim, é um bom argumento sobre a adição de nova linha. Então, +1list()
. Eu reverti sua edição.Ou, como inspirado em @MatheusAraujo:
df[nrow(df) + 1,] = list("v1","v2")
Isso permitiria tipos de dados mistos.
fonte
Há agora
add_row()
a partir dotibble
outidyverse
pacotes.Colunas não especificadas recebem um
NA
.fonte
rbind
eas.matrix
abaixoEu gosto, em
list
vez de,c
porque ele lida melhor com tipos de dados mistos. Adicionando uma coluna adicional à pergunta do pôster original:Observe que é necessário algum controle adicional se a conversão de string / fator for importante.
Ou usando as variáveis originais com a solução de MatheusAraujo / Ytsen de Boer:
Observe que esta solução não funciona bem com as cadeias, a menos que haja dados existentes no quadro de dados.
fonte
hello
egoodbye
estiver no caracteredf
, você pode fazer o seguinte. Você não necessariamente usa nomes em uma lista.df <- data.frame(hello = "hi", goodbye = "bye", volume = 1,stringsAsFactors = FALSE); rbind(df, list("hola", "ciao", 100))
.Não muito elegante, mas:
Na documentação da
rbind
função:fonte
Eu preciso adicionar
stringsAsFactors=FALSE
ao criar o quadro de dados..
fonte
Certifique-se de especificar
stringsAsFactors=FALSE
ao criar o quadro de dados:Deixar de usar
stringsAsFactors=FALSE
ao criar o quadro de dados resultará no seguinte erro ao tentar adicionar a nova linha:fonte
Existe uma maneira mais simples de acrescentar um registro de um quadro de dados para outro, se você souber que os dois quadros de dados compartilham as mesmas colunas e tipos. Para acrescentar uma linha
xx
dayy
apenas fazer o seguinte, ondei
é oi
'th linha naxx
.Simples assim. Sem vínculos confusos. Se você precisar anexar tudo
xx
ayy
, chame um loop ou aproveite as habilidades de sequência de R e faça o seguinte:fonte
Se você deseja criar um quadro de dados vazio e adicionar conteúdo em um loop, o seguinte pode ajudar:
Espero que ajude :)
fonte