2016-07-21 2 views
1

J'ai trois objets data.frame qui doivent être filtrés par une valeur de seuil donnée simultanément. Je veux les filtrer sur la valeur de seuil donnée pour tous les objets data.frame. Quelqu'un peut-il me donner une idée possible pour accomplir cette tâche?Filtrer plusieurs objets data.frame par un seuil donné simultanément

données simulées:

df1 <- data.frame(
    start=seq(1, by=9, len=18), end=seq(6, by=9, len=18), 
    ID=letters[seq(1:18)], score=sample(1:25, 18, replace = FALSE)) 

df2 <- data.frame(
    start=seq(2, by=11, len=20), end=seq(8, by=11, len=20), 
    ID=letters[seq(1:20)], score=sample(1:25, 20, replace = FALSE)) 

df3 <- data.frame(
    start=seq(4, by=11, len=25), end=seq(9, by=11, len=25), 
    ID=letters[seq(1:25)], score=sample(1:25, 25, replace = FALSE)) 

ma solution de tentative comme suit:

filtrant seuil:

df.li <- list(df1, df2, df3) 
keep <- obj$score <= 12 

test <- lapply(df.li, function(ele_) { 
    keep <- ele_$score <= 12 
    discard <- ele_[!keep] 
    res <- data.frame(kee=keep, 
        dis=discard) 
    return(res) 
}) 

ma sortie désirée:

si cette approche peut se produire, Je vais regrouper les sorties de filtrage pour chaque objet data.frame sous forme de liste.

Je pense qu'il pourrait y avoir une meilleure façon de le faire. En ce qui concerne la question que j'ai soulevée, quelle serait la meilleure approche pour accomplir cette tâche? Quelqu'un peut-il me signaler un moyen possible de résoudre ce problème? Merci d'avance.

Répondre

3

Vous pouvez essayer:

lst <- list(df1, df2, df3) 

library(dplyr) 
lapply(lst, function(x) { filter(x, score <= 12) }) 

Ou, comme par @akrun par mentionné, dans la base R:

lapply(lst, function(x) { subset(x, score <= 12) }) 
+0

Merci faveur de toutes sortes vous. Bravo – Jeff

+1

@Jurat Heureux que ça a aidé :) –

+0

Je veux résumer l'ensemble des instances conservées et non-gardées pour chaque objet data.frame après le filtrage. Un moyen d'atteindre cette sortie? Merci beaucoup – Jeff