2017-03-20 5 views
0

Ich möchte die Anzahl der Zahl kleiner als x in einem geparsten Text zählen.Umgang mit geparsten Text

Dies ist der Code, den mir die Liste gibt:

library(rvest) 
library(reshape2) 


td <- read_html(x = "http://www.imdb.com/name/nm1287124/?ref_=tt_ov_dr") 
list<- as.list(td %>% # feed `main.page` to the next step%>% # load the page 
    html_nodes(".filmo-row") %>% # isloate the text 
    html_text())  

Weiß jemand, wie man zählt, zum Beispiel der Menge Zahlen, die kleiner als 2017?

(vollständig zu sein; Endziel ist die Menge der Direktor Kredite bis zu einem bestimmten Jahr zu rechnen)

+0

Bitte geben Sie alle Pakete an, die Sie verwenden. – Roland

+0

rvest und reshape2 – nemja

Antwort

0

Sagen wir, wir haben:

text <- "asdasd8927askdmasjdo89jans1982736djnaos987anksdjnj2008da" 

Zahlen Angenommen werden immer von etwas eingeschlossen, aber [0-9], dann könnten Sie eine Funktion schreiben, die dies tun wird:

idx <- gregexpr("[0-9]+", text)[[1]] 
lens <- attr(idx, "match.length") 
nums <- lapply(seq_along(idx), function(i) { 
    substr(text, idx[i], idx[i] + lens[i] - 1) 
}) 
nums <- as.numeric(nums) 

(?grep und ?substr für explanat Ion) Schließlich können Sie die Zahlen zählen, die 2017 mehr als sind

sum(nums > 2017) 


bearbeiten (Kommentar)

Sagen wir, wir wollen nur auf genau 4-stellige Zahlen betrachten, dann ist die regex (und die substr Indizes) kann eingestellt werden. Jetzt suchen wir "Not a Number" 4 mal "eine Nummer" "Not a Number". Um nur den "Zahl" -Teil zu extrahieren, starten wir substr eine Position später und stoppen eine Position früher.

idx <- gregexpr("[^0-9][0-9]{4}[^0-9]", text)[[1]] 
lens <- attr(idx, "match.length") 
nums <- lapply(seq_along(idx), function(i) { 
    substr(text, idx[i] + 1, idx[i] + lens[i] - 2) 
}) 
nums <- as.numeric(nums) 

Jetzt nums enthält nur die 2: 4-stellige Zahlen.

nums 
sum(nums > 2017) 
+0

Danke für Ihre Antwort, aber das funktioniert nicht für meine Daten. (nur um vollständig zu sein; ich möchte die Director-Credits vor einem bestimmten Jahr zählen, siehe: http://www.imdb.com/name/nm1287124/?ref_=tt_ov_dr) – nemja

+0

Nun, Sie könnten den Code an Ihre spezifische Zeichenfolge anpassen . Wenn Sie nur Zahlen mit einer Länge von 4 Ziffern betrachten möchten, können Sie diese Regex verwenden: '[^ 0-9] [0-9] {4} [^ 0-9]'. Dann sucht die Regex nach einem Muster "NaN 4 mal eine Zahl NaN". Also müssen Sie die Start- und Stopp-Indizes in der 'substr'-Funktion +1 und -1 anpassen:' substr (Text, idx [i] + 1, idx [i] + Linse [i] - 2) ' – mRcSchwering