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