2013-07-27 3 views
4

У меня есть d-фрейм данных, и я хочу удалить столбцы, имеющие почти одно и то же имя. Пример цв, col1, col2 .... ColnУдалить столбцы с почти конкретным именем

Я пытался что-то вроде этого:

d$coln <- NULL 

, но он работает только для последнего столбца ColN.

+1

'd [! Grepl ("Col", имена (d))]' – Arun

ответ

6

Используйте grep, чтобы идентифицировать столбцы и list(NULL), чтобы удалить их.

Некоторые образцы данных:

set.seed(1) 
mydf <- data.frame(id_1 = 1:6, id_2 = c("A", "B"), varA.1 = sample(letters, 6), 
        varA.2 = sample(letters, 6), varA.3 = sample(letters, 6), 
        varB.2 = sample(10, 6), varB.3 = sample(10, 6), 
        varC.3 = rnorm(6)) 
mydf 
# id_1 id_2 varA.1 varA.2 varA.3 varB.2 varB.3  varC.3 
# 1 1 A  g  y  r  4  3 -0.04493361 
# 2 2 B  j  q  j  7  4 -0.01619026 
# 3 3 A  n  p  s  8  1 0.94383621 
# 4 4 B  u  b  l  2  10 0.82122120 
# 5 5 A  e  e  p  10  6 0.59390132 
# 6 6 B  s  d  u  1  2 0.91897737 

Давайте удалить все столбцы, которые имеют "Vara" в них.

mydf[grep("varA", names(mydf))] 
mydf[grep("varA", names(mydf))] <- list(NULL) 
mydf 
# id_1 id_2 varB.2 varB.3  varC.3 
# 1 1 A  4  3 -0.04493361 
# 2 2 B  7  4 -0.01619026 
# 3 3 A  8  1 0.94383621 
# 4 4 B  2  10 0.82122120 
# 5 5 A  10  6 0.59390132 
# 6 6 B  1  2 0.91897737 
+0

Вы также можете использовать 'mydf [Grep ("Vara", имена (mydf), инвертный = TRUE)]' только верните столбцы, которые не совпадают *. – thelatemail

+0

@thelatemail, конечно, но это не разрушительно удаляет. Вам нужно будет переназначить новый объект (что для обычного пользователя, вероятно, лучше, чем полностью избавиться от столбцов из источника 'data.frame'). – A5C1D2H2I1M1N2O1R2T1

Смежные вопросы