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
"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