Problem understanding how stack () works

I can not plunge into the documentation for ? stack and why it does not work. Consider:

> 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 

Here is what I want:

 values ind "b" "x1" "c" "x1" "d" "x1" NA "x1" ... etc. 
+6
source share
2 answers

x should be a named list:

 stack(list(x1= x1,x2 = x2)) 
+7
source

Well, first you pass a matrix argument to the stack when its help page asks: "a list or data frame that needs to be stacked or unzipped." Also, if you add it to the default data framework for strAsAsFactors, it will fail with a very uninformative error message.

  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 
+4
source

Source: https://habr.com/ru/post/954975/


All Articles