[R] Stacking of vectors to form a column vector

Bert Gunter gunter.berton at gene.com
Thu Apr 30 18:51:05 CEST 2015


Yes, I think unlist() is still better.

One caution (for all): make sure the columns are all of the same
type/class/mode or you may be in for nasty surprises.

Cheers,
Bert

Bert Gunter
Genentech Nonclinical Biostatistics
(650) 467-7374

"Data is not information. Information is not knowledge. And knowledge
is certainly not wisdom."
Clifford Stoll




On Thu, Apr 30, 2015 at 9:32 AM, Marc Schwartz <marc_schwartz at me.com> wrote:
> Hi,
>
> Given that a data frame is a list:
>
>   unlist(mydata[, 1:3])
>
> For example:
>
>> all(unlist(iris[, 1:3]) == do.call(c, iris[, 1:3]))
> [1] TRUE
>
>
> Also, note that the returned result in both cases above retains names:
>
>> unlist(iris[, 1:3])
>   Sepal.Length1   Sepal.Length2   Sepal.Length3   Sepal.Length4
>             5.1             4.9             4.7             4.6
>   Sepal.Length5   Sepal.Length6   Sepal.Length7   Sepal.Length8
>             5.0             5.4             4.6             5.0
>   Sepal.Length9  Sepal.Length10  Sepal.Length11  Sepal.Length12
>             4.4             4.9             5.4             4.8
> ...
>
> You can just get the plain vector by using:
>
>> unlist(iris[, 1:3], use.names = FALSE)
>   [1] 5.1 4.9 4.7 4.6 5.0 5.4 4.6 5.0 4.4 4.9 5.4 4.8 4.8 4.3 5.8 5.7
>  [17] 5.4 5.1 5.7 5.1 5.4 5.1 4.6 5.1 4.8 5.0 5.0 5.2 5.2 4.7 4.8 5.4
>  [33] 5.2 5.5 4.9 5.0 5.5 4.9 4.4 5.1 5.0 4.5 4.4 5.0 5.1 4.8 5.1 4.6
>  [49] 5.3 5.0 7.0 6.4 6.9 5.5 6.5 5.7 6.3 4.9 6.6 5.2 5.0 5.9 6.0 6.1
> ...
>
>
> As Bert notes, the indices would need to be adjusted for the actual data frame in question.
>
> Regards,
>
> Marc
>
>
>
>> On Apr 30, 2015, at 10:52 AM, Bert Gunter <gunter.berton at gene.com> wrote:
>>
>> ... and if this is what is wanted, somewhat cleaner and more
>> generalizable for programming would be:
>>
>> do.call(c, mydata[,1:3])
>>
>> ## where the column indices might have to be adjusted to get the
>> desired columns.
>>
>> Cheers,
>>
>> Bert
>>
>> Bert Gunter
>> Genentech Nonclinical Biostatistics
>> (650) 467-7374
>>
>> "Data is not information. Information is not knowledge. And knowledge
>> is certainly not wisdom."
>> Clifford Stoll
>>
>>
>>
>>
>> On Wed, Apr 29, 2015 at 11:51 PM, Jim Lemon <drjimlemon at gmail.com> wrote:
>>> Hi Olufemi,
>>> I sounds like you have a data frame (let's call it "mydata") with at
>>> least three elements (columns). You may be trying to use c() in this
>>> way:
>>>
>>> y1to3<-c(y1,y2,y3)
>>>
>>> in which case it won't work. However:
>>>
>>> y1to3<-c(mydata$y1,mydata$y2,mydata$y3)
>>>
>>> might do what you want, substituting whatever the name of your data
>>> frame is for "mydata".
>>>
>>> Jim
>>>
>>>
>>> On Thu, Apr 30, 2015 at 1:20 PM, Jeff Newmiller
>>> <jdnewmil at dcn.davis.ca.us> wrote:
>>>> I am sure you can use c() because columns may be vectors even though vectors are not columns, but you really need to follow the posting guide and provide a reproducible example for us to show you how. You might find [1] helpful, in particular as it describes the use of the dput function to give us a few rows of your data.
>>>>
>>>> [1] http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example
>>>> ---------------------------------------------------------------------------
>>>> Jeff Newmiller                        The     .....       .....  Go Live...
>>>> DCN:<jdnewmil at dcn.davis.ca.us>        Basics: ##.#.       ##.#.  Live Go...
>>>>                                      Live:   OO#.. Dead: OO#..  Playing
>>>> Research Engineer (Solar/Batteries            O.O#.       #.O#.  with
>>>> /Software/Embedded Controllers)               .OO#.       .OO#.  rocks...1k
>>>> ---------------------------------------------------------------------------
>>>> Sent from my phone. Please excuse my brevity.
>>>>
>>>> On April 29, 2015 7:48:24 PM PDT, Olufemi Bolarinwa <dafemlions at yahoo.co.uk> wrote:
>>>>> Thank you Jeff for your response.
>>>>> My y1, y2, y3 are actually 3 columns in the data so I cannot use the
>>>>> c() function to concatenate them. I am confusing the "columns" with
>>>>> vectors. I actually meant columns.
>>>>> Any help will be much appreciated
>>>>> Olufemi
>>>>>
>>>>>
>>>>>
>>>>> On Wednesday, 29 April 2015, 22:31, Jeff Newmiller
>>>>> <jdnewmil at dcn.davis.CA.us> wrote:
>>>>>
>>>>>
>>>>> Vectors are not "columns" or "rows". Use the c() function to
>>>>> concatenate vectors.
>>>>> ---------------------------------------------------------------------------
>>>>> Jeff Newmiller                        The    .....      .....  Go
>>>>> Live...
>>>>> DCN:<jdnewmil at dcn.davis.ca.us>        Basics: ##.#.      ##.#.  Live
>>>>> Go...
>>>>>                                     Live:  OO#.. Dead: OO#..  Playing
>>>>> Research Engineer (Solar/Batteries            O.O#.      #.O#.  with
>>>>> /Software/Embedded Controllers)              .OO#.      .OO#.
>>>>> rocks...1k
>>>>> ---------------------------------------------------------------------------
>>>>>
>>>>> Sent from my phone. Please excuse my brevity.
>>>>>
>>>>> On April 29, 2015 6:56:46 PM PDT, Olufemi Bolarinwa
>>>>> <dafemlions at yahoo.co.uk> wrote:
>>>>>> Hello,I am estimating a system of nonlinear equation where I need to
>>>>>> stack my vector of y. I have data of about 6000units. I tried using
>>>>> the
>>>>>> rbind but instead of having a vector of 1 by 18000, it is giving me a
>>>>> 3
>>>>>> by 6000 so that my matrix multiplication is non-conformable. The stack
>>>>>> command requires an identifier but in this case, I do not have a
>>>>> unique
>>>>>> identifier.
>>>>>> I would like to stack the the first 6000 units of y1 on the 2nd 6000
>>>>>> units of y2 and 6000 units of y3.
>>>>>> Any help will be greatly appreciated.
>>>>>> ThanksOlufemi
>



More information about the R-help mailing list