rbind data.frames bez tytułu
Próbuję dowiedzieć się, dlaczego funkcja
rbindnie działa zgodnie z oczekiwaniami po podłączeniu do nienazwanych data.frames.
Oto moje testy:
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)
Wydaje mi się to trochę dziwne. Czy brakuje mi dobrego powodu, dla którego to nie powinno działać po wyjęciu z pudełka?
edytuj, aby uzyskać więcej informacji
Korzystając z sugestii @ JoshO'Brien, aby
debugować, mogę zidentyfikować błąd jako występujący w tej części instrukcji
if
rbind.data.framefunkcja
if (is.null(pi) || is.na(jj <- pi[[j]]))
(wersja online kodu jest tutaj:
http://svn.r-project.org/R/tru ... ame.R
http://svn.r-project.org/R/tru ... ame.R
zaczynając od: „
### tutaj są metody rbind i cbind.
")
Podczas przechodzenia przez program wydaje się, że wartość
pinie została ustawiona w tym momencie, więc program próbuje indeksować wbudowaną stałą
pijako
pi [[3]]i zgłasza błędy.
Z tego, co rozumiem, wydaje się, że wewnętrzny obiekt
pinie jest ustawiony z powodu tego wcześniejszego wiersza, w którym
clabszostał zainicjowany jako
NULL:
if (is.null(clabs)) clabs <- names(xi) else { #pi gets set here
Jestem zdezorientowany, próbując to rozgryźć, ale zaktualizuję się, gdy sprawy się połączą.
Nie znaleziono powiązanych wyników
Zaproszony:
Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się
1 odpowiedzi
Anonimowy użytkownik
Potwierdzenie od:
Oto kod, który pomoże Ci zrozumieć, o co mi chodzi:
Mam nadzieję że to pomoże. Nazwy są wyświetlane jako , ale te dwie operacje są różne.
W związku z tym dwie ramki danych z nagłówkami kolumn zamienionymi na mogą być „rbound”, ale dwie ramki danych bez żadnych nagłówków kolumn (osiągnięte za pomocą ) nie mogą.