Re: [R] Why copying columns of a data.frame becomes numeric?
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?
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?
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?
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?
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?
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.