2013-09-30 4 views
6

Я не могу обернуть голову вокруг документации для ?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 

Вот что я хочу:

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

    ... etc. 

ответ

7

x должен быть назван список:

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

И не только список, но и список _named_ (или data.frame). –

+1

@JoshuaUlrich. Думаю, документация, вероятно, должна быть более ясной. – joran

+0

Я согласен, но кто-то собирается прийти и сказать, чтобы просто использовать plyr вместо этого, так что это спорный вопрос. :) –

4

Ну, во-первых вы передаете матрицу аргумент в стек, когда его страница справки запрашивает: «список или фрейм данных, который должен быть уложен или раскован». Кроме того, если вы внесете его в фреймворк данных с настройкой по умолчанию для strAsAsFactors, он завершится неудачно с очень неинформативным сообщением об ошибке.

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

Да, я тоже попробовал эту перестановку, и получил это сообщение об ошибке. Спасибо за вашу помощь. – gung

+2

Колонки факторов не могут быть легко сложены, потому что они не разделяют атрибут уровней, поэтому любое заданное число во внутреннем представлении имеет двусмысленное значение, если вы просто складываете необработанные целые числа. –

Смежные вопросы