2016-10-18 1 views
0

zu substrahieren Ich mache eine Analyse einiger Untertitel und ich habe es geschafft, die Frequenz zu reinigen und zu zählen. Jetzt möchte ich alle Stoppwörter löschen (kommt mit dem "tm" Paket). HierEinen Zeichenvektor zu einer Zeichenspalte in R

ist das Beispiel der Daten:

words2 <- c("a", "be", "am", "you", "lannister", "wolf", "angry", "scandals", "should", "me") 
frequency2 <- c(12,10,15, 20, 5, 10,8,3,9,20) 
stopwordslst <- c("i","me","my","myself","we","our","ours","ourselves","you","your","yours","yourself","it","its","they","them","thei","theirs","themselves", "what", 
"those","am","is","are","be","been","being","have","has","does","did","doing","would","should") 

so versuche ich eine for-Schleife zu machen, war die Idee zu machen logisch und löschen Sie alle wahren diejenigen. aber ich kann nicht den richtigen Weg finden, es zu tun, damit es das Falsche in der gleichen Struktur im data.frame behält. Hier

ist das, was ich versuche:

for(i in words){ 
if(i == stopwordslst[]){ 
    (data1[-i,]) 
} 
} 

Erwartete Ergebnisse der gleichen Datenrahmen aber wie folgt aus:

words  frequency 
lannister 5 
wolf  10 
angry  8 
scandals 3 

Vielen Dank im Voraus

+1

Warum for-Schleife zu tun? Sehen Sie sich '% in%' an, wie in 'words2 [! Words2% in% stopwordslst]' – Sotos

Antwort

0

Wie @Sotos erwähnt, Sie %in% zusammen mit ! verwenden können, um die Worte zu bekommen, die Sie wollen die gleichen Indizes enthalten und verwenden, um die Frequenz zu wählen.

df <- data.frame(words = words2[!words2 %in% stopwordslst], 
       frequency = frequency2[!words2 %in% stopwordslst]) 
df 
# words frequency 
#1   a  12 
#2 lannister   5 
#3  wolf  10 
#4  angry   8 
#5 scandals   3 

Hinweis: Sie haben nicht 'a' in Ihrem stopwordslst, so dass es enthalten ist.


Oder ein wenig sauberer,

idx <- !words2 %in% stopwordslst 
df <- data.frame(words = words2[idx],frequency = frequency2[idx]) 
+1

Vielen Dank, es hat perfekt funktioniert! – GeorgeMeSa

0

iterativ die Worte df auftretende in stopwordlst Werke zu entfernen für mich.

df = data.frame(words=words2,frequency=frequency2) 
df = df[(sapply(c(1:nrow(df)),FUN = function(x){sum(df$words[x]==stopwordslst)})==0),] 
> df 
     words frequency 
5 lannister   5 
6  wolf  10 
7  angry   8 
8 scandals   3 
Verwandte Themen