2016-07-27 12 views
1

uns Unter der Annahme, erhielt diese Datentabelle X:Subset ein data.table durch einen Vektor von Teil

Random <- function(n=1, lenght=6){ 
    randomString <- c(1:n) 
    for (i in 1:n){randomString[i] <- paste(sample(c(0:9, letters, LETTERS), 
            lenght, replace=TRUE),collapse="")} 
    return(randomString)} 

X <- data.table(A = rnorm(11000, sd = 0.8), 
       B = rnorm(11000, mean = 10, sd = 3), 
       C = sample(LETTERS[1:24], 11000, replace=TRUE), 
       D = sample(letters[1:24], 11000, replace=TRUE), 
       E = round(rnorm(11000,mean=25, sd=3)), 
       F = round(runif(n = 11000,min = 1000,max = 25000)), 
       G = round(runif(11000,0,200000)), 
       H = Random(11000)) 

Ich mag es von einiger Teilkette der Teilmenge. Hier haben wir g nehmen, F und d in Spalte H

Hier haben wir eine Lösung, diese für eine Teilkette zu tun: How to select R data.table rows based on substring match (a la SQL like)

Wenn wir nur g wollen, mit data.table Paket:

X[like(H,pattern = "g")] 

Aber mein Problem ist es, dies für g, F und d in einem einzigen Vorgang zu replizieren.

Gibt es eine Möglichkeit, dies zu tun, ohne 3 Tabellen zu erstellen, sie zusammenzuführen und Duplikate zu entfernen?

+0

Ich denke, 'like' wird nur ein einzelnes Element anstelle eines Vektors nehmen. Versuchen Sie mit 'Vectorize' – akrun

+0

@Akrun Sie haben Recht, und es ist mein Problem. Ich kenne keine Funktion, die einen Vektor für diese Operation aufnehmen kann. Btw, danke für deine Hilfe. –

Antwort

4

Wir grep von paste verwenden, um die vector in einem einzigen String ing durch collapse mit | ing.

X[grep(paste(Vec, collapse="|"), H)] 

Oder wir können durch paste ing den pattern Vektor collapse d von | (wie von @Tensibal) den gleichen Ansatz verwenden

X[like(H, pattern = paste(Vec, collapse="|"))] 
+3

'like' verwendet' grepl' unter der Haube, nehme ich an, dass die 'paste' Methode auch auf' like' '' 'pattern' Argument funktionieren sollte – Tensibai

1

Ich glaube, Sie auch diese verwenden:

NewTable <- X[grepl("g",H) | grepl("F",H) | grepl("d",H)]