Выберите столбцы на основе нескольких условий на имена столбцов - PullRequest
0 голосов
/ 29 марта 2019

Я пытаюсь суммировать по столбцам, содержащим определенные символы, и я не знаю, как этого добиться, используя grep -.

Я хочу суммировать следующие столбцы.все они имеют «до 1.30» и «до 5 лет» в именах:

"Under 1.30: - Married-couple family: - With related children of the householder under 18 years: - Under 5 years only"

"Under 1.30: - Other family: - Male householder, no wife present: - With related children of the householder under 18 years: - Under 5 years only"  

"Under 1.30: - Other family: - Female householder, no husband present: - With related children of the householder under 18 years: - Under 5 years only" 

Я попробовал следующий код, но он возвращает больше столбцов в дополнение к 3, показанным выше.

names(B17022[,grep("^Under 1.30.[Under 5 years only]", names(B17022))]) 

Например, он тоже возвращает:

"Under 1.30: - Married-couple family:" 

Ответы [ 2 ]

0 голосов
/ 29 марта 2019

Вы можете использовать grepl, который дает вам вектор с TRUE или FALSE, что облегчает его применение для нескольких условий.

names(B17022)[grepl("Under 1.30", names(B17022)) & 
grepl("Under 5 years only", names(B17022))]

Используемые данные:

B17022 <- data.frame(matrix(rnorm(3), ncol= 3))

names(B17022) <- c("Under 1.30: - Married-couple family:  - With related children of the householder under 18 years:  - Under 5 years only", "Under 1.30: - Other family: - Male. householder, no wife present: - With related children of the householder under 18 years: - Under 5 years only", "Under 1.30: - Other family: - Female householder, no husband present: - With related children of the householder under 18 years: - Under 5 years only")
0 голосов
/ 29 марта 2019

Как насчет:

names(B17022[grep("^Under.*Under 5 years only", names(B17022))])

редактировать: объяснение

.* соответствует нулю или более любого символа, кроме новой строки. Таким образом, это будет в основном соответствовать чему-либо между двумя «Under».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...