2017-07-12 3 views
0

J'ai une trame de données qui a les éléments suivants et je veux avoir un sous-ensemble d'enregistrements.Données de sous-ensemble dans R d'un autre vecteur (exclusion)

location <- c('london', 'london','london', 'newyork' ,'newyork', 'paris', 'delhi') 
year<- c(1990, 1991, 1992, 2001, 2002, 2003,2001) 

df<- data.frame(location,year) 

et j'ai un vecteur dire

x<- c('newyork', 'delhi') 

Je veux sous-ensemble de la trame de données telle que la trame de données final contient tous les éléments sauf l'emplacement qui ne figurent pas dans x. Je voudrais créer un cadre de données de test, j'ai essayé cela

test1 <- df[df$location %in% c('newyork','delhi'), ] 

Il me donne le contraire. Quelqu'un peut-il aider?

J'attends la sortie comme ceci:

 location year 
     london 1990 
     london 1991 
     london 1992 
     paris  2003 
+1

Essayez ceci: 'test1 <- df [! df $ location% en% c ('newyork', 'delhi'),] ' – www

+0

merci! ça a marché! – user3570187

Répondre

0

comme @ycw a souligné dans le commentaire, la négation de l'état logique vous donnera le résultat attendu

location <- c('london', 'london','london', 'newyork' ,'newyork', 'paris', 'delhi') 
year <- c(1990, 1991, 1992, 2001, 2002, 2003,2001) 

df <- data.frame(location, year) 

x <- c('newyork', 'delhi') 

# add"!" to the subset condition 
test1 <- df[ !df$location %in% c('newyork','delhi'), ] 

test1 

Résultat

location year 
1 london 1990 
2 london 1991 
3 london 1992 
6 paris 2003 
0

En utilisant Dplyr:

new_df <- df %>% 
    filter(!(location %in% c("newyork", "delhi"))) 
0

S'il y a seulement des éléments de couple que vous voulez exclure de la trame de données d'origine, vous pouvez également créer le sous-ensemble comme suit:

location <- c('london', 'london','london', 'newyork' ,'newyork', 
'paris', 'delhi') 
year<- c(1990, 1991, 1992, 2001, 2002, 2003,2001) 

df<- data.frame(location,year) 

# Identify which elements you wish to remove and precede with NOT operator (!) 
df2 <- df[!df$location=="newyork" & !df$location=="paris",] 

df2 

prendre note ce n'est pas très efficace si vous prévoyez de filtrer plusieurs éléments. Dans ces cas, l'approche de ycw et Damian est meilleure.

Cependant, si vous avez seulement des éléments individuels ou en couple pour enlever, la disposition ci-dessus est une méthode simple, rapide, logique pour obtenir ce que vous êtes après:

location year 
1 london 1990 
2 london 1991 
3 london 1992 
7 delhi 2001