2017-06-30 1 views
0

J'ai une trame de données qui consiste en un trait morphologique mesuré par différents observateurs, à des dates différentes. Mon objectif ici est de sous-ensemble de la trame de données pour supprimer les mesures faites par un observateur particulier (condition 1: dans le niveau du facteur) avant une certaine date (condition 2: ci-dessous donnée).R: Sous-ensemble d'une trame de données basée sur une colonne de date, dans un niveau de facteur d'une autre colonne

Voici un exemple dataframe, où je voudrais me débarrasser des mesures effectuées par « A » avant 2012-06-04:

obs <- rep(c("A", "B"), each=5) 
date <- rep(c("2012-06-01", "2012-06-02","2012-06-03","2012-06-04","2012-06-05"), times=2) 
size <- rnorm(10) 
df <- data.frame(date, obs, size) 

J'ai essayé de jouer avec la fonction subset sans résultat . Je suis sûr que cela doit être facile! Merci!

+0

Vous pouvez convertir les chaînes de dates dans le format de date après la création de la trame de données en utilisant les après 'df $ date <- as.Date (df $ date)'. Cela aidera à filtrer en aval. –

Répondre

2

Peut-être avec subset

subset(df, !(obs == "A" & as.Date(date) < as.Date("2012-06-04"))) 


#   date obs  size 
#4 2012-06-04 A -0.6892431 
#5 2012-06-05 A -0.8715875 
#6 2012-06-01 B 0.1167215 
#7 2012-06-02 B 0.9300228 
#8 2012-06-03 B 0.8731350 
#9 2012-06-04 B -0.7219468 
#10 2012-06-05 B 0.9846479 

Selon la documentation:

sous-ensemble - expression logique indiquant les éléments ou les lignes pour garder

Nous créons donc un vecteur logique pour la lignes que nous voulons garder.

ou sans subset avec la même logique:

df[!(df$obs == "A" & as.Date(df$date) < as.Date("2012-06-04")), ] 
+0

Merci, je viens de trouver exactement la même méthode, cela fonctionne parfaitement. –

0

Nous pouvons utiliser filter de tidyverse

library(dplyr) 
df %>% 
    mutate(date = as.Date(date)) %>% 
    filter(!(obs == "A" & date < as.Date("2012-06-04"))) 
#  date obs  size 
#1 2012-06-04 A 2.0358088 
#2 2012-06-05 A 0.2621886 
#3 2012-06-01 B 0.3747718 
#4 2012-06-02 B -0.7784647 
#5 2012-06-03 B 1.0913249 
#6 2012-06-04 B -0.4795268 
#7 2012-06-05 B 0.6139994