2016-05-27 12 views
0

I eindeutige Werte in col1 meines Datenrahmen df zu finden versuchen, wo es weniger als eine bestimmte Zahl (zB: - 15)Numerische Vergleiche innerhalb Grepl in r

ich den folgenden Code versucht,

unique(df[grepl("increased by 1", df$col1) & 
(as.numeric(grepl("[0-9]",df$col1)) <15),]$col1) 

Aber es scheint nur der erste grepl funktioniert.

[1] "increased by 17 %" "increased by 10 %" "increased by 16 %" "increased by 1 %" "increased by 14 %" 
[6] "increased by 13 %" "increased by 12 %" "increased by 15 %" "increased by 11 %" "increased by 18 %" 

Vorschläge zur Behebung dieses Problems?

Antwort

1

Was ist mit dem Erstellen einer neuen Variablen mit gsub?

# get vector in R 
temp <- c("increased by 17 %", "increased by 10 %", "increased by 16 %", 
      "increased by 1 %", "increased by 14 %", "increased by 13 %", 
      "increased by 12 %", "increased by 15 %", "increased by 11 %", 
      "increased by 18 %") 
# extract value as numeric 
myValues <- as.numeric(gsub("increased by ([0-9]+) %", "\\1", temp)) 

Um einen logischen Vektor

myValues > 15 

Um die Werte zu extrahieren

myValues[myValues > 15] 

den Indizes

which(myValues > 15) 
+0

Danke Imo, das hat geholfen :) – andy

1

grepl("[0-9]",df$col1) nur sucht Ziffern erhalten innerhalb 012 zu produzierenund gibt TRUE zurück, wenn eine Ziffer gefunden wurde. Wenn man TRUE in einen numerischen Wert umwandelt, erhält man nur eine 1. Das ist immer weniger als 15.

Das ist also nicht das, wonach Sie suchen. Wie lmo erwähnt, möchten Sie wahrscheinlich die tatsächliche Zahl über etwas wie gsub extrahieren.