Выберите переменные на основе имени (простое регулярное выражение) - PullRequest
8 голосов
/ 10 сентября 2009

Я хотел бы включить имена переменных, которые подразумевают, что я должен делать с ними. Я представляю себе данные "опроса".

library(Rlab) # Needed for rbern() function.
survey <- data.frame(cbind(  
id = seq(1:10),  
likert_this = sample(seq(1:7),10, replace=T),  
likert_that = sample(seq(1:7), 10, replace=T),  
dim_bern_varx = rbern(10, 0.6),  
disc_1 = sample(letters[1:5],10,replace=T)))

Теперь я хотел бы сделать определенные вещи со всеми переменными, которые содержат likert , другие вещи с переменными, которые содержат bern и т. Д.

Как это можно сделать в R?

Ответы [ 3 ]

15 голосов
/ 10 сентября 2009

Вы можете использовать grep() с colnames():

survey[,grep("bern", colnames(survey))]
3 голосов
/ 10 сентября 2009

Если у вас есть серия имен, которые вы хотели бы получить, вы также можете использовать match. возможно, вам часто нужны переменные «пульс», «физические упражнения», «рост», «вес» и «возраст», но они иногда появляются в разных местах или с другими добавленными переменными. Вы можете сохранить вектор общих имен, затем сопоставить их с фреймом данных и получить новый df только ваших стандартных столбцов в нужном вам порядке.

basenames <- c("pulse", "exercise", "height", "weight", "age")
get.columns <- match(basenames, names(dataframe))
new.df <- dataframe[,get.columns]
2 голосов
/ 11 сентября 2009

Пакет "operator" допускает некоторый Perl-подобный синтаксис:

library(operators)

survey[, colnames(survey) %~% "bern"]

или

subset(survey, select = colnames(survey) %~% "bern")
...