无法理解stack()的工作原理

时间:2013-09-30 20:52:39

标签: r

我不能围绕?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.

2 个答案:

答案 0 :(得分:7)

x需要是一个命名列表:

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

答案 1 :(得分:5)

好吧,首先,当它的帮助页面要求:“要堆叠或未堆叠的列表或数据框”时,将矩阵参数传递给堆栈。此外,如果您使用stringsAsFactors的默认设置将其设置为数据帧,则它将失败,并显示非常无法提供信息的错误消息。

 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