Reputation: 173
How do I select multiple columns by name without having to type out each name.
For example I have the following code:
CTDB[, c(
"ENJOY_TV_RADIO_CHILD",
"ENJOY_FMLY_CLOSE_FRND_CHILD",
"ENJOY_HOBBIES_CHILD",
"ENJOY_FAV_MEAL_CHILD",
"ENJOY_SHOWER_CHILD",
"ENJOY_SCENT_CHILD",
"ENJOY_PPL_SMILE_CHILD",
"ENJOY_LOOK_SMART_CHILD",
"ENJOY_READ_CHILD",
"ENJOY_FAV_DRINK_CHILD",
"ENJOY_SMALL_THINGS_CHILD",
"ENJOY_LANDSCAPE_CHILD",
"ENJOY_HELP_OTHR_CHILD",
"ENJOY_PRAISE_CHILD")] <-revalue(as.matrix(CTDB[, c(
"ENJOY_TV_RADIO_CHILD",
"ENJOY_FMLY_CLOSE_FRND_CHILD",
"ENJOY_HOBBIES_CHILD",
"ENJOY_FAV_MEAL_CHILD",
"ENJOY_SHOWER_CHILD",
"ENJOY_SCENT_CHILD",
"ENJOY_PPL_SMILE_CHILD",
"ENJOY_LOOK_SMART_CHILD",
"ENJOY_READ_CHILD", '
"ENJOY_FAV_DRINK_CHILD",
"ENJOY_SMALL_THINGS_CHILD",
"ENJOY_LANDSCAPE_CHILD",
"ENJOY_HELP_OTHR_CHILD",
"ENJOY_PRAISE_CHILD")]), c("0"=3, "1"=2, "2"=1, "3"=0))
All the columns are in order but instead of selecting by number like below
CTDB[,74:87] <-revalue(as.matrix(CTDB[,74:87]), c("0"=3, "1"=2, "2"=1, "3"=0))
I would like to select by the name of the column.
Thank you!
Upvotes: 0
Views: 1402
Reputation: 15062
If you need to do this as part of a pipe, you can also use dplyr::select
and its helper functions in two equivalent ways, including one that can avoid regular expressions:
CTBD %>% select(matches("^ENJOY.*CHILD$"))
CTBD %>% select(intersect(starts_with("ENJOY"), ends_with("CHILD")))
Upvotes: 1
Reputation: 79188
You should use grep
or grepl
CTBD[,grep("^ENJOY.*CHILD$",colnames(CTBD)]
or
CTBD[,grepl("^ENJOY.*CHILD$",colnames(CTBD)]
Upvotes: 3