rbind de données.cadres sans noms
Je suis à essayer de comprendre pourquoi le rbind
ne fonctionne pas comme prévu lors de l'assemblage des données.cadres sans noms.
Voici mes tests:
test <- data.frame(
id=rep(c("a","b"),each=3),
time=rep(1:3,2),
black=1:6,
white=1:6,
stringsAsFactors=FALSE
)
# take some subsets with different names
pt1 <- test[,c(1,2,3)]
pt2 <- test[,c(1,2,4)]
# method 1 - rename to same names - works
names(pt2) <- names(pt1)
rbind(pt1,pt2)
# method 2 - works - even with duplicate names
names(pt1) <- letters[c(1,1,1)]
names(pt2) <- letters[c(1,1,1)]
rbind(pt1,pt2)
# method 3 - works - with a vector of NA's as names
names(pt1) <- rep(NA,ncol(pt1))
names(pt2) <- rep(NA,ncol(pt2))
rbind(pt1,pt2)
# method 4 - but... does not work without names at all?
pt1 <- unname(pt1)
pt2 <- unname(pt2)
rbind(pt1,pt2)
Cela semble un peu étrange pour moi. Ai-je raté une bonne raison pourquoi elle ne devrait pas travailler hors de la boîte?
modifier pour plus d'info
À l'aide de @JoshO Brien suggestion à debug
, je peux identifier l'erreur comme se produisant au cours de cette if
déclaration de la part de la rbind.data.frame
fonction
if (is.null(pi) || is.na(jj <- pi[[j]]))
(version en ligne de code ici: http://svn.r-project.org/R/trunk/src/library/base/R/dataframe.R à partir de: "### Ici sont les méthodes pour rbind et cbind.")
De progression dans le programme, la valeur de pi
ne semble pas avoir été défini à ce stade, d'où le programme tente d'indexer la constante intégrée pi
comme pi[[3]]
et erreurs.
De ce que je peux comprendre, de l'intérieur pi
objet ne semble pas être en raison de cette ancienne ligne où clabs
a été initialisé comme NULL
:
if (is.null(clabs)) clabs <- names(xi) else { #pi gets set here
Je suis dans un enchevêtrement d'essayer de comprendre cela, mais sera mise à jour comme il vient.
- Avoir un coup d'oeil au code de
rbind.data.frame
plus qui est concerné par la vérification et la corrélation de ligne et de colonne nom. Vous pourriez fairedebug(rbind.data.frame)
et puis, étape par le biais de la méthode 4 pour déterminer exactement où l'erreur est lancée. - ont mis à jour pour fournir quelques infos. Je ne suis pas si grande à l'interprétation du code et travaille à cela, mais peut-être qu'il sera évident pour quelqu'un d'autre.
Vous devez vous connecter pour publier un commentaire.
Parce que
unname()
& assigner explicitement NA comme en-têtes de colonne ne sont pas les mêmes actions. Lorsque les noms de colonne sont tous NA, puis unrbind()
est possible. Depuisrbind()
prend les noms/colnames de la trame de données, les résultats ne correspondent pas & doncrbind()
échoue.Voici un peu de code pour vous aider à voir ce que je veux dire:
J'espère que cette aide. Les noms apparaissent comme des
NA
chaque, mais les deux opérations sont différentes.Par conséquent, les deux trames de données avec leurs en-têtes de colonne remplacé à
NA
peut être "rbound" mais deux trames de données sans en-têtes de colonne (réalisé à l'aide deunname()
) ne le peuvent pas.NA
etunname
de données.les cadres ont différentesnames()
, je pense toujours que R doit être en mesure derbind
sans nomdata.frames
si il peut gérernames()
qui sont tousNA
s.