dplyr::select
results in a data.frame, is there a way to make it return a vector if the result is one column?
Currently, I have to do extra step (res <- res$y
) to convert it to vector from data.frame, see this example:
#dummy data df <- data.frame(x = 1:10, y = LETTERS[1:10], stringsAsFactors = FALSE) #dplyr filter and select results in data.frame res <- df %>% filter(x > 5) %>% select(y) class(res) #[1] "data.frame" #desired result is a character vector res <- res$y class(res) #[1] "character"
Something as below:
res <- df %>% filter(x > 5) %>% select(y) %>% as.character res # This gives strange output [1] "c(\"F\", \"G\", \"H\", \"I\", \"J\")" # I need: # [1] "F" "G" "H" "I" "J"
To pick out single or multiple columns use the select() function. The select() function expects a dataframe as it's first input ('argument', in R language), followed by the names of the columns you want to extract with a comma between each name.
For the Conversion of dataframe into a vector, we can simply pass the dataframe column name as [[index]]. Approach: We are taking a column in the dataframe and passing it into another variable by the selection method. Selection method can be defined as choosing a column from a data frame using ” [[]]”.
The best way to do it (IMO):
library(dplyr) df <- data_frame(x = 1:10, y = LETTERS[1:10]) df %>% filter(x > 5) %>% .$y
In dplyr 0.7.0, you can now use pull():
df %>% filter(x > 5) %>% pull(y)
Something like this?
> res <- df %>% filter(x>5) %>% select(y) %>% sapply(as.character) %>% as.vector > res [1] "F" "G" "H" "I" "J" > class(res) [1] "character"
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With