Re: [R] Why copying columns of a data.frame becomes numeric?

2013-04-12 Thread Sarah Goslee
It's another reason not to use $ for extraction.

By default, R reduces dimensionality when subsetting, so mtcars$mpg
actually returns a numeric vector. With $, there's no way to override
the default behavior.

 data(mtcars)
 a - mtcars$mpg
 class(a)
[1] numeric
 dim(a)
NULL

 a - mtcars[, mpg, drop=FALSE]
 class(a)
[1] data.frame
 dim(a)
[1] 32  1

Sarah

On Fri, Apr 12, 2013 at 3:32 PM, C W tmrs...@gmail.com wrote:
 Dear list,

 I want the 1st, 2nd, 5th, and 6th columns of mtcars.  After copying them,
 the columns become numeric class rather than data frame.

 But, when I copy rows, they data frame retains its class.  Why is this?  I
 don't see why copying rows vs columns is so different.

 class(mtcars)
 [1] data.frame
 head(mtcars)
mpg cyl disp  hp dratwt  qsec vs am gear carb
 Mazda RX4 21.0   6  160 110 3.90 2.620 16.46  0  144
 Mazda RX4 Wag 21.0   6  160 110 3.90 2.875 17.02  0  144
 Datsun 71022.8   4  108  93 3.85 2.320 18.61  1  141
 Hornet 4 Drive21.4   6  258 110 3.08 3.215 19.44  1  031
 Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  032
 Valiant   18.1   6  225 105 2.76 3.460 20.22  1  031
 a - mtcars$mpg
 class(a)
 [1] numeric
 b - mtcars[1:5, ]
 class(b)
 [1] data.frame


 Thanks a lot,
 Mike


-- 
Sarah Goslee
http://www.functionaldiversity.org

__
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.


Re: [R] Why copying columns of a data.frame becomes numeric?

2013-04-12 Thread William Dunlap
 class(mtcars[1:4,]) # select some rows
[1] data.frame
 class(mtcars[,1:4]) # select some columns
[1] data.frame
 class(mtcars[,3]) # select one column
[1] numeric
 class(mtcars[, 3, drop=FALSE]) # select one column
[1] data.frame

I cannot give a definitive reason why it is done this way, but you do need
some way to get from a data.frame to a column it contains and some way
to get from a data.frame to a single-column data.frame.  The above methods
do give you that choice.

Also note that rows and columns of data.frame are intrinsically different.
A column is generally a vector of one type while a row is a list of 1-long
vectors.

Bill Dunlap
Spotfire, TIBCO Software
wdunlap tibco.com


 -Original Message-
 From: r-help-boun...@r-project.org [mailto:r-help-boun...@r-project.org] On 
 Behalf
 Of C W
 Sent: Friday, April 12, 2013 12:33 PM
 To: r-help
 Subject: [R] Why copying columns of a data.frame becomes numeric?
 
 Dear list,
 
 I want the 1st, 2nd, 5th, and 6th columns of mtcars.  After copying them,
 the columns become numeric class rather than data frame.
 
 But, when I copy rows, they data frame retains its class.  Why is this?  I
 don't see why copying rows vs columns is so different.
 
  class(mtcars)
 [1] data.frame
  head(mtcars)
mpg cyl disp  hp dratwt  qsec vs am gear carb
 Mazda RX4 21.0   6  160 110 3.90 2.620 16.46  0  144
 Mazda RX4 Wag 21.0   6  160 110 3.90 2.875 17.02  0  144
 Datsun 71022.8   4  108  93 3.85 2.320 18.61  1  141
 Hornet 4 Drive21.4   6  258 110 3.08 3.215 19.44  1  031
 Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  032
 Valiant   18.1   6  225 105 2.76 3.460 20.22  1  031
  a - mtcars$mpg
  class(a)
 [1] numeric
  b - mtcars[1:5, ]
  class(b)
 [1] data.frame
 
 
 Thanks a lot,
 Mike
 
   [[alternative HTML version deleted]]
 
 __
 R-help@r-project.org mailing list
 https://stat.ethz.ch/mailman/listinfo/r-help
 PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
 and provide commented, minimal, self-contained, reproducible code.

__
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.


Re: [R] Why copying columns of a data.frame becomes numeric?

2013-04-12 Thread Berend Hasselman

On 12-04-2013, at 21:32, C W tmrs...@gmail.com wrote:

 Dear list,
 
 I want the 1st, 2nd, 5th, and 6th columns of mtcars.  After copying them,
 the columns become numeric class rather than data frame.
 
 But, when I copy rows, they data frame retains its class.  Why is this?  I
 don't see why copying rows vs columns is so different.
 
 class(mtcars)
 [1] data.frame
 head(mtcars)
   mpg cyl disp  hp dratwt  qsec vs am gear carb
 Mazda RX4 21.0   6  160 110 3.90 2.620 16.46  0  144
 Mazda RX4 Wag 21.0   6  160 110 3.90 2.875 17.02  0  144
 Datsun 71022.8   4  108  93 3.85 2.320 18.61  1  141
 Hornet 4 Drive21.4   6  258 110 3.08 3.215 19.44  1  031
 Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  032
 Valiant   18.1   6  225 105 2.76 3.460 20.22  1  031
 a - mtcars$mpg
 class(a)
 [1] numeric

Here you are assigning a single column of mtcars, which is a numeric vector, to 
another object. So that is a numeric vector.

 b - mtcars[1:5, ]
 class(b)
 [1] data.frame
 

Here you are assigning a couple of rows of the complete dataframe and the 
result is a dataframe.

If you want the  1st, 2nd, 5th, and 6th columns of mtcars in a new datafrmae 
why don't you do this:

 a - mtcars[,c(1,2,5,6)]

then

 class(a)
[1] data.frame


Berend

__
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.


Re: [R] Why copying columns of a data.frame becomes numeric?

2013-04-12 Thread C W
What if my data is much larger, and I don't know what column number but
know its name?  Do I have to grep its by name?
How about subset()?  Is that what people commonly use?

Mike

On Fri, Apr 12, 2013 at 3:44 PM, Berend Hasselman b...@xs4all.nl wrote:


 On 12-04-2013, at 21:32, C W tmrs...@gmail.com wrote:

  Dear list,
 
  I want the 1st, 2nd, 5th, and 6th columns of mtcars.  After copying them,
  the columns become numeric class rather than data frame.
 
  But, when I copy rows, they data frame retains its class.  Why is this?
  I
  don't see why copying rows vs columns is so different.
 
  class(mtcars)
  [1] data.frame
  head(mtcars)
mpg cyl disp  hp dratwt  qsec vs am gear carb
  Mazda RX4 21.0   6  160 110 3.90 2.620 16.46  0  144
  Mazda RX4 Wag 21.0   6  160 110 3.90 2.875 17.02  0  144
  Datsun 71022.8   4  108  93 3.85 2.320 18.61  1  141
  Hornet 4 Drive21.4   6  258 110 3.08 3.215 19.44  1  031
  Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  032
  Valiant   18.1   6  225 105 2.76 3.460 20.22  1  031
  a - mtcars$mpg
  class(a)
  [1] numeric

 Here you are assigning a single column of mtcars, which is a numeric
 vector, to another object. So that is a numeric vector.

  b - mtcars[1:5, ]
  class(b)
  [1] data.frame
 

 Here you are assigning a couple of rows of the complete dataframe and the
 result is a dataframe.

 If you want the  1st, 2nd, 5th, and 6th columns of mtcars in a new
 datafrmae why don't you do this:

  a - mtcars[,c(1,2,5,6)]

 then

  class(a)
 [1] data.frame


 Berend




[[alternative HTML version deleted]]

__
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.


Re: [R] Why copying columns of a data.frame becomes numeric?

2013-04-12 Thread Berend Hasselman

On 12-04-2013, at 21:56, C W tmrs...@gmail.com wrote:

 What if my data is much larger, and I don't know what column number but know 
 its name?  Do I have to grep its by name?
 How about subset()?  Is that what people commonly use?
 

Continuing with mtcars and the desired columns

b - mtcars[,c(mpg,cyl,drat,wt)]

Berend

 Mike
 
 On Fri, Apr 12, 2013 at 3:44 PM, Berend Hasselman b...@xs4all.nl wrote:
 
 On 12-04-2013, at 21:32, C W tmrs...@gmail.com wrote:
 
  Dear list,
 
  I want the 1st, 2nd, 5th, and 6th columns of mtcars.  After copying them,
  the columns become numeric class rather than data frame.
 
  But, when I copy rows, they data frame retains its class.  Why is this?  I
  don't see why copying rows vs columns is so different.
 
  class(mtcars)
  [1] data.frame
  head(mtcars)
mpg cyl disp  hp dratwt  qsec vs am gear carb
  Mazda RX4 21.0   6  160 110 3.90 2.620 16.46  0  144
  Mazda RX4 Wag 21.0   6  160 110 3.90 2.875 17.02  0  144
  Datsun 71022.8   4  108  93 3.85 2.320 18.61  1  141
  Hornet 4 Drive21.4   6  258 110 3.08 3.215 19.44  1  031
  Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  032
  Valiant   18.1   6  225 105 2.76 3.460 20.22  1  031
  a - mtcars$mpg
  class(a)
  [1] numeric
 
 Here you are assigning a single column of mtcars, which is a numeric vector, 
 to another object. So that is a numeric vector.
 
  b - mtcars[1:5, ]
  class(b)
  [1] data.frame
 
 
 Here you are assigning a couple of rows of the complete dataframe and the 
 result is a dataframe.
 
 If you want the  1st, 2nd, 5th, and 6th columns of mtcars in a new datafrmae 
 why don't you do this:
 
  a - mtcars[,c(1,2,5,6)]
 
 then
 
  class(a)
 [1] data.frame
 
 
 Berend
 
 
 

__
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.


Re: [R] Why copying columns of a data.frame becomes numeric?

2013-04-12 Thread C W
I was thinking,
b - subset(mtcars, select=c(mpg, cyl, drat, wt))

Yours is even simpler. :)

Thanks
Mike

On Fri, Apr 12, 2013 at 4:06 PM, Berend Hasselman b...@xs4all.nl wrote:


 On 12-04-2013, at 21:56, C W tmrs...@gmail.com wrote:

  What if my data is much larger, and I don't know what column number but
 know its name?  Do I have to grep its by name?
  How about subset()?  Is that what people commonly use?
 

 Continuing with mtcars and the desired columns

 b - mtcars[,c(mpg,cyl,drat,wt)]

 Berend

  Mike
 
  On Fri, Apr 12, 2013 at 3:44 PM, Berend Hasselman b...@xs4all.nl wrote:
 
  On 12-04-2013, at 21:32, C W tmrs...@gmail.com wrote:
 
   Dear list,
  
   I want the 1st, 2nd, 5th, and 6th columns of mtcars.  After copying
 them,
   the columns become numeric class rather than data frame.
  
   But, when I copy rows, they data frame retains its class.  Why is
 this?  I
   don't see why copying rows vs columns is so different.
  
   class(mtcars)
   [1] data.frame
   head(mtcars)
 mpg cyl disp  hp dratwt  qsec vs am gear carb
   Mazda RX4 21.0   6  160 110 3.90 2.620 16.46  0  144
   Mazda RX4 Wag 21.0   6  160 110 3.90 2.875 17.02  0  144
   Datsun 71022.8   4  108  93 3.85 2.320 18.61  1  141
   Hornet 4 Drive21.4   6  258 110 3.08 3.215 19.44  1  031
   Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  032
   Valiant   18.1   6  225 105 2.76 3.460 20.22  1  031
   a - mtcars$mpg
   class(a)
   [1] numeric
 
  Here you are assigning a single column of mtcars, which is a numeric
 vector, to another object. So that is a numeric vector.
 
   b - mtcars[1:5, ]
   class(b)
   [1] data.frame
  
 
  Here you are assigning a couple of rows of the complete dataframe and
 the result is a dataframe.
 
  If you want the  1st, 2nd, 5th, and 6th columns of mtcars in a new
 datafrmae why don't you do this:
 
   a - mtcars[,c(1,2,5,6)]
 
  then
 
   class(a)
  [1] data.frame
 
 
  Berend
 
 
 



[[alternative HTML version deleted]]

__
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.