Comment ajouter des lignes à des cadres de données vides avec en-tête dans R? [dupliquer]
possibilité de dupliquer:
R: perte de noms de colonnes lors de l'ajout de lignes à une base de données vide
j'ai créé une base de données vide avec les noms de colonne seulement comme suit
> compData <- data.frame(A= numeric(0), B= numeric(0))
> compData
[1] A B
<0 rows> (or 0-length row.names)
> compData <- rbind(compData,c(5,443))
> compData
X5 X443
1 5 443
dans la colonne ci-dessus après avoir ajouté une ligne, les noms des colonnes sont changés. Comment puis-je ajouter de nouvelles données de ligne de données-cadre?
6 réponses
ajouter à une ligne zéro data.frame
agira différemment d'ajouter à une data.frame
qui contient déjà des lignes
de ?rbind
la méthode de base de données rbind supprime d'abord tous les arguments à colonne zéro et à rangée zéro. (Si cela ne laisse AUCUN, il renvoie le premier argument avec des colonnes autrement une base de données zéro colonne zéro rangée.) Il prend ensuite les classes des colonnes à partir de la première base de données, et correspond colonnes par nom (plutôt que par position). Les facteurs ont leurs niveaux augmentés au besoin (dans l'ordre des niveaux des ensembles de niveaux des facteurs rencontrés) et le résultat est un facteur ordonné si et seulement si tous les composants étaient des facteurs ordonnés. (Le dernier point diffère de S-PLUS.) Les catégories anciennes (vecteurs entiers avec niveaux) sont promues en facteurs.
vous avez un certain nombre d'options --
le plus simple
compData[1, ] <- c(5, 443)
plus compliqué
Ou vous pouvez forcer c(5,433)
à une liste ou de données.cadre
rbind(compData,setNames(as.list(c(5,443)), names(compData)))
ou
rbind(compData,do.call(data.frame,setNames(as.list(c(5,443)), names(compData))))
mais dans ce cas, autant faire
do.call(data.frame,setNames(as.list(c(5,443)), names(compData)))
"1519210920 des données".option de la table
vous pouvez utiliser la data.table
fonction rbindlist
qui fait moins de vérification et préserve ainsi les noms de les premières données.cadre
library(data.table)
rbindlist(list(compData, as.list(c(5,443))
je viens d'avoir un moyen plus simple de le faire... comme suit
compData <- data.frame(A= numeric(0), B= numeric(0))
compData
compData[nrow(compData)+1, ] <- c(5, 443)
compData
Colnames <- names(compData)
compData <- rbind(compData, c(5, 443))
names(compData) <- Colnames
vous pouvez affecter au dataframe par index:
compData <- data.frame(A= numeric(0), B= numeric(0))
compData
compData[1, ] <- c(5, 443)
compData
qui donne:
> compData <- data.frame(A= numeric(0), B= numeric(0))
> compData
[1] A B
<0 rows> (or 0-length row.names)
> compData[1, ] <- c(5, 443)
> compData
A B
1 5 443
vous pouvez utiliser la fonction structure
avec l'argument .Names
:
compData <- structure(rbind(compData,c(5,443)), .Names = names(compData))
# A B
#1 5 443
si vous avez des données du même type*, vous pouvez faire ce qui suit:
- convertissez la base de données actuelle en une matrice.
as.matrix(compData)
- Ajouter une nouvelle ligne à la fin.
rbind(as.matrix(compData), c(5,443))
- convertissez la matrice en base de données.
as.data.frame(rbind(as.matrix(compData), c(5,443)))
en bref:
compData <- as.data.frame(rbind(as.matrix(compData), c(5,443)))
*Si vous avez des données de même type, vous pouvez les conserver dans une matrice.