Dans R, comment ajouter une nouvelle ligne à un bloc de données une fois que le bloc de données a déjà été initialisé?
Jusqu'à présent, j'ai ceci:
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
Toute aide serait appréciée
de
aussi.names(de) <- c("hello","goodbye")
etrbind
rbind(df, setNames(de, names(df)))
rbind(data.frame(a = 1), data.frame(b = 2))
.. pourquoi voudriez-vous? J'espère que cela jetterait une erreur malgré tout. C'est commemerge
avec uneby
variable aléatoire . Et c'est 2015, tout le monde n'est-il pas fixéoptions(stringsAsFactors = FALSE)
?stringsAsFactors=FALSE
peut être une solution rapide, mais changer les paramètres par défaut que d'autres personnes vont définir différemment peut vraiment gâcher une journée.Réponses:
Comme @Khashaa et @Richard Scriven le soulignent dans les commentaires, vous devez définir des noms de colonne cohérents pour tous les blocs de données que vous souhaitez ajouter.
Par conséquent, vous devez déclarer explicitement les noms de colonnes pour le deuxième bloc de données,,
de
puis utiliserrbind()
. Vous définissez uniquement les noms de colonnes pour la première trame de données,df
:la source
newdf<-rbind(df, data.frame(hello="hola", goodbye="ciao"))
OU avec variable:newdf<-rbind(df, data.frame(hello=var1, goodbye=var2))
Faisons simple:
la source
df[nrow(df) + 1, 1:2] = c("v1", "v2")
etdf[nrow(df), 3] = 100
Mais c'est quand même un bon point sur l'ajout d'une nouvelle ligne. Donc, +1list()
. J'ai annulé votre modification.Ou, comme inspiré par @MatheusAraujo:
df[nrow(df) + 1,] = list("v1","v2")
Cela permettrait des types de données mixtes.
la source
Il y a maintenant
add_row()
des packagestibble
outidyverse
.Les colonnes non spécifiées obtiennent un
NA
.la source
rbind
etas.matrix
ciJ'aime
list
plutôtc
parce qu'il gère mieux les types de données mixtes. Ajout d'une colonne supplémentaire à la question de l'affiche originale:Notez qu'un contrôle supplémentaire est nécessaire si la conversion chaîne / facteur est importante.
Ou en utilisant les variables originales avec la solution de MatheusAraujo / Ytsen de Boer:
Notez que cette solution ne fonctionne pas bien avec les chaînes sauf s'il existe des données dans le dataframe.
la source
hello
etgoodbye
sont dans le personnagedf
, vous pouvez faire ce qui suit. Vous n'utilisez pas nécessairement de noms dans une liste.df <- data.frame(hello = "hi", goodbye = "bye", volume = 1,stringsAsFactors = FALSE); rbind(df, list("hola", "ciao", 100))
.Pas très élégant, mais:
De la documentation de la
rbind
fonction:la source
Je dois ajouter
stringsAsFactors=FALSE
lors de la création du dataframe..
la source
Assurez-vous de spécifier
stringsAsFactors=FALSE
lors de la création du dataframe:stringsAsFactors=FALSE
Si vous ne l' utilisez pas lors de la création du dataframe, l'erreur suivante se produira lors de la tentative d'ajout de la nouvelle ligne:la source
Il existe un moyen plus simple d'ajouter un enregistrement d'un dataframe à un autre SI vous savez que les deux dataframes partagent les mêmes colonnes et types. Pour ajouter une ligne de
xx
à,yy
procédez comme suit: où sei
trouve lai
'ème lignexx
.Aussi simple que cela. Pas de liaisons désordonnées. Si vous devez tout ajouter
xx
àyy
, appelez une boucle ou profitez des capacités de séquence de R et procédez comme suit:la source
Si vous souhaitez créer un bloc de données vide et ajouter du contenu dans une boucle, les éléments suivants peuvent vous aider:
J'espère que ça aide :)
la source