2014-05-08 12 views
18

Mam poniżej linii kodu dla cbind, ale dostaję komunikat ostrzegawczy za każdym razem. Chociaż kod nadal działa tak, jak być powinien, czy istnieje sposób na rozwiązanie ostrzeżenia?Ostrzeżenia cbind: nazwy wierszy zostały znalezione z krótkiej zmiennej i zostały usunięte

dateset = subset(all_data[,c("VAR1","VAR2","VAR3","VAR4","VAR5","RATE1","RATE2","RATE3")]) 
dateset = cbind(dateset[c(1,2,3,4,5)],stack(dateset[,-c(1,2,3,4,5)])) 

Ostrzeżenia:

Warning message: 
    In data.frame(..., check.names = FALSE) : 
     row names were found from a short variable and have been discarded 

Z góry dzięki!

+0

"Kod nadal działa tak, jak być powinien"; możesz użyć funkcji try(), aby pominąć ostrzeżenie: dateset = try (cind (zestaw dat [c (1,2,3,4,5)], stos (datownik [, - c (1,2,3,4,5))])), cichy = PRAWDA) – FFI

Odpowiedz

30

Zgaduję swoją data.frame ma row.names:

A <- data.frame(a = c("A", "B", "C"), 
       b = c(1, 2, 3), 
       c = c(4, 5, 6), 
       row.names=c("A", "B", "C")) 

cbind(A[1], stack(A[-1])) 
# a values ind 
# 1 A  1 b 
# 2 B  2 b 
# 3 C  3 b 
# 4 A  4 c 
# 5 B  5 c 
# 6 C  6 c 
# Warning message: 
# In data.frame(..., check.names = FALSE) : 
# row names were found from a short variable and have been discarded 

Co tu się dzieje jest to, że ponieważ nie można domyślnie są powielane row.names w data.frame a ponieważ nie mów na R każdy punkt, który powtarza kod row.names, gdy przetwarza pierwszą kolumnę na taką samą liczbę rzędów kolumn, R po prostu odrzuca row.names.

Porównaj z podobnym data.frame, ale bez row.names:

B <- data.frame(a = c("A", "B", "C"), 
       b = c(1, 2, 3), 
       c = c(4, 5, 6)) 

cbind(B[1], stack(B[-1])) 
# a values ind 
# 1 A  1 b 
# 2 B  2 b 
# 3 C  3 b 
# 4 A  4 c 
# 5 B  5 c 
# 6 C  6 c 

Alternatywnie, można ustawić row.names = NULL w wyciągu cbind:

cbind(A[1], stack(A[-1]), row.names = NULL) 
# a values ind 
# 1 A  1 b 
# 2 B  2 b 
# 3 C  3 b 
# 4 A  4 c 
# 5 B  5 c 
# 6 C  6 c 

Jeśli oryginalny row.names są ważne, ty c a także dodaj je ponownie: z:

cbind(rn = rownames(A), A[1], stack(A[-1]), row.names = NULL) 
# rn a values ind 
# 1 A A  1 b 
# 2 B B  2 b 
# 3 C C  3 b 
# 4 A A  4 c 
# 5 B B  5 c 
# 6 C C  6 c 
+3

Przepraszam, Anando. W ogóle nie próbowałem cię rzucić. –

+2

@RichardScriven, nie znaczyło, że tak wygląda i że usunąłeś swoją odpowiedź. Jak wskazałem, 'unlist' * powinno * mieć wydajność (nie wspominając, że będzie działać z' factor's, którego 'stack' nie będzie). W rzeczywistości używam go w mojej aktualnej wersji funkcji ["Stacked"] (https://github.com/mrdwab/splitstackshape/blob/devel/R/Stacked.R#L76) (która pierwotnie była oparta na ' stack ") i pomyślałem, że skomentuję obserwacje, które znalazłem w tym procesie. – A5C1D2H2I1M1N2O1R2T1

+0

Świetnie. Miałem ten sam komunikat ostrzegawczy z '' transform() '' i działało to samo rozwiązanie: '' transform (data, ..., row.names = NULL) '' – PatrickT

Powiązane problemy