2016-03-26 5 views
0

Zuerst habe ich Liste von Strings:Zeilen Daten mit bestimmten Zeichenfolge Wert halten in R

/index.php/abc/def 
/link/view/id/123 
/subject/view/id/456 

Und dann, ich habe Datensätze wie folgt aus:

Date and Time   Request 
2016-01-17 05:46:26 aladdine.com/view/id/786 
2016-01-17 05:46:30 aladdine.com/subject/view/id/456 
2016-01-17 05:46:31 aladdine.com/pub/link/view/id/123 
2016-01-17 05:46:44 aladdine.com/index.php/abc/def/ghi 
2016-01-17 05:46:58 aladdine.com/brs/view/id.266 

Wie kann ich die Datensätze zu halten, dass Haben Sie einen ähnlichen Text zur vorherigen Liste?

Ausgang:

Date and Time   Request 
2016-01-17 05:46:30 aladdine.com/subject/view/id/456 
2016-01-17 05:46:31 aladdine.com/pub/link/view/id/123 
2016-01-17 05:46:44 aladdine.com/index.php/abc/def/ghi 

Antwort

0

den gleichen Datensatzes mit @Cinnamon Stern verwendet, könnten Sie tun:

dataSet <- CO2; 
iList <- list("Qn1", "Mn1", "Mc1"); 

alle verbinden Sie die Saiten in einem einzigen regulären Ausdruck des Typs (str1|str2|str3):

pat = paste(unlist (iList),collapse = "|") 
pat = paste0("(",pat,")") 

Dann Machen Sie einen Grepl, um festzustellen, welche Zeilen diesen Text in der Spalte Plant enthalten.

dataSet[grepl(pattern = pat,x = dataSet$Plant),] 

Ergebnis:

Plant  Type Treatment conc uptake 
1 Qn1  Quebec nonchilled 95 16.0 
2 Qn1  Quebec nonchilled 175 30.4 
3 Qn1  Quebec nonchilled 250 34.8 
4 Qn1  Quebec nonchilled 350 37.2 
5 Qn1  Quebec nonchilled 500 35.3 
6 Qn1  Quebec nonchilled 675 39.2 
7 Qn1  Quebec nonchilled 1000 39.7 
43 Mn1 Mississippi nonchilled 95 10.6 
44 Mn1 Mississippi nonchilled 175 19.2 
45 Mn1 Mississippi nonchilled 250 26.2 
46 Mn1 Mississippi nonchilled 350 30.0 
47 Mn1 Mississippi nonchilled 500 30.9 
48 Mn1 Mississippi nonchilled 675 32.4 
49 Mn1 Mississippi nonchilled 1000 35.5 
64 Mc1 Mississippi chilled 95 10.5 
65 Mc1 Mississippi chilled 175 14.9 
66 Mc1 Mississippi chilled 250 18.1 
67 Mc1 Mississippi chilled 350 18.9 
68 Mc1 Mississippi chilled 500 19.5 
69 Mc1 Mississippi chilled 675 22.2 
70 Mc1 Mississippi chilled 1000 21.9 
0

Ich nahm das CO2 Beispiel aus der R-Datenbank. Bitte weisen Sie Ihren Datensatz dataSet, Ihre Liste zu iList und bitte alle Vorkommen von dataSet$Plant zu der Spalte, die Sie interessiert sind (wahrscheinlich dataSet$Request).

Der resultierende Datensatz wird in results gespeichert.

rm(list = ls()); 

dataSet <- CO2; 

varsToCheck <- dataSet$Plant; 

iList <- list("Qn1", "Mn1", "Mc1"); 

# Iterate over all rows 
for(i in 1:length(dataSet$Plant)) { 
    # Extract string for checking 
    validateString <- varsToCheck[i]; 
    # Iterate over all match criterions 
    for(j in 1:length(iList)) { 
    # Extract the match criterion 
    matchString <- iList[[j]]; 
    # Validate if part of the string match the criterion 
    if(grepl(matchString, validateString)) { 
     # Create results object when we first add a row 
     if(exists("results")) { 
     results <- rbind(results, dataSet[i,]); 
     } else { 
     results <- dataSet[i,]; 
     } 
    } 
    } 

} 
+0

vielen Dank für Ihre Antwort, das ist so nützlich .. aber ich habe das Problem mit den Ergebnissen. Warum zeigen die Ergebnisse nur die letzte Reihe von Datensätzen an, die mit der iList übereinstimmen? Also, das Ergebnis wird immer 1 Reihe haben – Ameerah

+0

Ich habe keine Ahnung, vielleicht vermisse ich etwas, aber für mich funktioniert es gut. Nimm das Beispiel und probiere es selbst aus. –

Verwandte Themen