Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Prevent automatic conversion of single column to vector

Tags:

I have a data frame like this:
df = data.frame(a=1:3, b=2:4, c=3:5)

I am selecting columns from that data frame using something akin to:
df[, c(T, F, T)]

This works fine as long as there are at least two columns to be returned; but, if I do this for example:
df[, c(T, F, F)]

... I suddenly only get a vector instead of a data.frame.

Normally this would be fine (or even desired), but since I need the result to be a data.frame at a later point, this completely messes up my scripts.

Is there a way I can prevent R from doing this automatic conversion to a vector for single-column selections?

like image 396
Nils Avatar asked May 24 '12 12:05

Nils


People also ask

How do I convert a column to a character in R?

To convert all columns of the data frame into the character we use apply() function with as. character parameter.

How do I turn a row into a Dataframe vector?

If we want to turn a dataframe row into a character vector then we can use as. character() method In R, we can construct a character vector by enclosing the vector values in double quotation marks, but if we want to create a character vector from data frame row values, we can use the as character function.

How do I change a character variable in R?

To convert factor levels into character then we can use as. character function by accessing the column of the data frame that contain factor values. For example, if we have a data frame df which contains a factor column named as Gender then this column can be converted into character column as as. character(df$Gender).


2 Answers

This one is pretty simple. Append , drop = FALSE to your subsetting.

E.g.

df[, c(T, F, F), drop = FALSE]

Also works for matrices.

like image 196
Fhnuzoag Avatar answered Sep 21 '22 06:09

Fhnuzoag


Also without the comma, i.e. df[c(T,F,F)], returns a dataframe but it sounds like you have cases where the new dataframe can have one or more columns. So use the drop option abovee

like image 39
Georgette Avatar answered Sep 22 '22 06:09

Georgette