2015-12-04 4 views
0

Dites, ma variable est la suivante.Supprimer des colonnes d'une trame de données qui figurent dans une liste, mais qui n'apparaissent pas dans une autre liste

df = read.csv('somedataset.csv') #contains 'col1','col2','col3','col4','col5' say 
colsSomeRemoveSomeDontRemove = c('col1','col2','col3') 
colsDontRemove = 'col2' 

Je voudrais supprimer toutes les colonnes de df qui figurent dans colsSomeRemoveSomeDontRemove, mais ne font pas partie de colsDontRemove.

Donc, fondamentalement, à la fin de mon df ne doit contenir que des colonnes 'col2','col4','col5'

Comment puis-je faire cela?

J'ai essayé de faire ce qui suit, mais n'a pas pu le faire fonctionner

df1 = cbind(df[,which(!(names(df) %in% colsSomeRemoveSomeDontRemove))],as.data.frame(df[,colsDontRemove])) 

Répondre

2
df[, !(colnames(df) %in% setdiff(colsSomeRemoveSomeDontRemove, colsDontRemove))] 
+0

Merci Ven, juste une correction mineure. Est-ce que df [,! (Colnames (df)% dans% setdiff (colsSomeRemoveSomeDontRemove, colsDontRemove))] – saltandwater

+0

Ouais. Tu as raison. @saltandwater –