2013-09-30 14 views
6

Tôi không thể che giấu xung quanh tài liệu cho số ?stack và lý do khiến tài khoản không hoạt động. Xem xét:Rắc rối hiểu cách thức hoạt động của stack()

> set.seed(1) 
> x1 = sample(c(letters[1:5], NA), size=10, replace=TRUE) 
> x2 = sample(c(letters[1:5], NA), size=10, replace=TRUE) 
> is.vector(x1) 
[1] TRUE 
> rbind(x1, x2) 
    [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] 
x1 "b" "c" "d" NA "b" NA NA "d" "d" "a" 
x2 "b" "b" "e" "c" "e" "c" "e" NA "c" "e" 
> stack(x1, x2) 
Error in rep.int(names(x), lapply(x, length)) : invalid 'times' value 
> stack(list(x1, x2)) 
Error in rep.int(names(x), lapply(x, length)) : invalid 'times' value 
> df = data.frame(x1=x1, x2=x2) 
> stack(df) 
Error in stack.data.frame(df) : no vector columns were selected 

Dưới đây là những gì tôi muốn:

values ind 
    "b" "x1" 
    "c" "x1" 
    "d" "x1" 
    NA "x1" 

    ... etc. 

Trả lời

7

x cần phải là một danh sách tên là:

stack(list(x1= x1,x2 = x2)) 
+2

Và không chỉ danh sách, mà còn là danh sách _named_ (hoặc data.frame). –

+1

@JoshuaUlrich Tài liệu có lẽ nên rõ ràng hơn về điều đó, tôi nghĩ vậy. – joran

+0

Tôi đồng ý, nhưng ai đó sẽ đi cùng và nói để chỉ sử dụng plyr thay vào đó, vì vậy nó là một điểm tranh luận. :) –

4

Vâng, trước hết bạn đang đi qua một đối số ma trận để ngăn xếp khi trang trợ giúp của nó là yêu cầu: "một danh sách hoặc khung dữ liệu được xếp chồng lên nhau hoặc unstacked." Hơn nữa nếu bạn biến nó thành một khung dữ liệu với thiết lập mặc định cho stringsAsFactors, nó sẽ thất bại với một thông báo lỗi rất không rõ ràng.

d=data.frame(x1=x1,x2=x2) 
stack(d , select=c(x1,x2)) 
#Error in stack.data.frame(x, ...) : no vector columns were selected 


d=data.frame(x1=x1,x2=x2, stringsAsFactors=FALSE) 
stack(d , select=c(x1,x2)) 
#---------- 
    values ind 
1  b x1 
2  c x1 
3  d x1 
4 <NA> x1 
5  b x1 
6 <NA> x1 
7 <NA> x1 
8  d x1 
9  d x1 
10  a x1 
11  b x2 
12  b x2 
13  e x2 
14  c x2 
15  e x2 
16  c x2 
17  e x2 
18 <NA> x2 
19  c x2 
20  e x2 
+0

Vâng, tôi đã thử hoán vị đó, và nhận được thông báo lỗi đó. Cảm ơn bạn đã giúp đỡ. – gung

+2

Các cột yếu tố không thể dễ dàng xếp chồng lên nhau vì chúng không chia sẻ thuộc tính mức, vì vậy bất kỳ số nào trong biểu diễn bên trong có nghĩa mơ hồ nếu bạn chỉ xếp chồng các số nguyên thô. –

Các vấn đề liên quan