2016-09-01 9 views
0

In R, wie überprüfen Sie, ob eine Zeichenfolge eine Teilzeichenfolge enthält, die nicht in einer Liste ist? Angenommen, Sie haben den Zeichenfolgenvektor fruits <- c('apple,pear,orange', 'apple,pear', 'apple,banana', 'apple'), und Sie möchten eine Funktion, die Ihnen sagt, ob ein bestimmtes Element eine Frucht hat, die nicht Apfel oder Birne ist. Im Beispiel würde es so etwas wieRegulärer Ausdruck enthält eine Zeichenfolge nicht in einer Liste

fruits <- c('apple,pear,orange', 'apple,pear', 
      'apple,banana', 'apple', 'pear,apple') 

other_fruits(fruits) 
# [1] TRUE FALSE TRUE FALSE FALSE 

Antwort

2

werden, wenn die Saiten immer Obst Namen durch Kommas getrennt sind, können Sie es ohne einen regulären Ausdruck tun, wie im Beispiel unten, obwohl unter dem Verfahren auch modifiziert werden kann, stattdessen eine Regex verwenden.

fruits <- c('apple,pear,orange', 'apple,pear', 
      'apple,banana', 'apple', 'pear,apple') 

sapply(strsplit(fruits,","), function(x) !all(x %in% c("apple","pear"))) 
[1] TRUE FALSE TRUE FALSE FALSE 

Oder allgemein:

other_fruits = function(string, fruit_check) { 
    sapply(strsplit(string,","), function(x) !all(x %in% fruit_check)) 
} 

other_fruits(fruits, c("apple","pear")) 

Oder sagen Sie andere Früchte zurückkehren wollen als die wählte Früchte:

other_fruits = function(string, fruit_check) { 
    lapply(strsplit(string,","), function(x) { 
    if (all(x %in% fruit_check)) NA else x[!(x %in% fruit_check)] 
    }) 
} 

other_fruits(fruits, "apple") 
[[1]] 
[1] "pear" "orange" 

[[2]] 
[1] "pear" 

[[3]] 
[1] "banana" 

[[4]] 
[1] NA 

[[5]] 
[1] "pear" 
0

Sie können einen Index erstellen, um zu sehen, wo die Früchte so aussehen:

fruits <- c('apple,pear,orange', 'apple,pear', 
      'apple,banana', 'apple', 'pear,apple', 'mango') 


str <- unique(unlist(strsplit(fruits,","))) 
dat <- sapply(str, grepl, fruits) 
dat 

    apple pear orange banana mango 
[1,] TRUE TRUE TRUE FALSE FALSE 
[2,] TRUE TRUE FALSE FALSE FALSE 
[3,] TRUE FALSE FALSE TRUE FALSE 
[4,] TRUE FALSE FALSE FALSE FALSE 
[5,] TRUE TRUE FALSE FALSE FALSE 
[6,] FALSE FALSE FALSE FALSE TRUE 

Zählen Sie die Anzahl, wie oft eine andere Frucht Apfel oder Birne erscheint;

apply(dat[,3:ncol(dat)], 1, sum) 

Oder erstellen Sie einen logischen Vektor, um anzuzeigen, wo die anderen Früchte sind;

as.logical(apply(dat[,3:ncol(dat)], 1, sum)) 
Verwandte Themen