2016-11-28 2 views
0

I ein kleines Problem, eins nach dem anderen Array/Datenrahmen Zeichenfolge Aussehen drucken müssen und countwie jedes Element Datenrahmen in R strcount

Ich habe ein Datenrahmen Pos_1 genannt, enthält Zeichenfolge wie diese:

Pos_1 = (morning bliss great happy) 

und der andere Datenrahmen Pos_2 genannt, enthält es Zeichenfolge wie diese:

Pos_2 = (morning great) 

Was ich tun möchte, ist, die Zeichenfolge zählen, die angezeigt werden von Pos_1 Datenrahmen in Pos_2

verwende ich die str_count jede Saite zu zählen, die

for(h in 1:5) 
Score=sum(str_count(Pos_2, Pos_1[h]))[1:length(Pos_1)] 

aus dem Code erscheinen oben nur die Summe aller String-Element aus Pos_1

Text Score 
morning 0 
bliss 0 
great 0 
happy 0 

zurückkehren erwartetes Ergebnis von count das Element, das mit dem Datenrahmen Pos_1 übereinstimmt und Datenrahmen Pos_2 mit strcount (siehe unten),

ich brauche Nur der Score Zeile unterhalb

Text  Score 
morning 1 
bliss  0 
great  1 
happy  0 

zu produzieren, ist es eine Lösung?

+0

können Sie bitte Beispieldaten –

+0

@ Mr.A hinzufügen, hallo, die Beispieldaten a ist oben geschrieben, ich möchte von Datenrahmen Pos_1 und Datenrahmen Pos_2 – hope9

+0

Ich bin immer noch verwirrt. Versuchen Sie zu zählen, wie oft jedes Element von 'Pos_2' in' Pos_1' erscheint, oder versuchen Sie, für jedes Element von 'Pos_1' zu bestimmen, ob es in' Pos_2' erscheint? – ulfelder

Antwort

1

Ich denke, das tut, was Sie wollen:

library(stringr) 

Score <- sapply(seq_along(unlist(Pos_1)), function(i) 
    sum(str_count(unlist(Pos_2), unlist(Pos_1)[i]))) 

Sie unlist verwenden, um Ihre Datenrahmen von Strings in Vektoren zu umwandeln. Dann verwenden Sie , um str_count über die Elemente des nicht aufgelisteten Pos_1 zu iterieren und einen Vektor dafür zu erhalten.

Wenn jedes Element Pos_1 wird in Pos_2 nicht mehr als einmal erscheinen, brauchen Sie nicht str_count und konnte es einfach verwenden:

Score <- +(unlist(Pos_1) %in% unlist(Pos_2)) 
+0

@ulferder thx a lottt, :), es funktionierte Mann, genial , Ich lerne gerade diese R-Programmierung, ich bekomme die Logik, aber Mangel an, wie man es schreibt und implementiert – hope9

+0

Froh, es hat funktioniert. Wenn es so wäre, wäre es gut, wenn Sie die Antwort formell annehmen würden. – ulfelder

+0

thx u für die Lösung dieses Problems :) – hope9

0

versuchen, diesen

library(stringr) 

Pos_1 <- c("morning", "bliss", "great","happy") 
Pos_2 <- c("morning", "great") 

df<-data.frame(Text=Pos_1,Score=unlist(lapply(Pos_1,function(x) sum(str_count(x,Pos_2))))) 

df 

Ausgang

 Text Score 
1 morning  1 
2 bliss  0 
3 great  1 
4 happy  0 
+0

aus dem obigen Code, ich bekomme einen Fehler, Methode ist nicht anwendbar – hope9