2016-12-07 2 views
-2

Frustriert newbie Frage in R:Iterate über eine Liste von Elementen, zählen Spiele in Datenrahmen

Sagen, ich habe eine Liste von Strings = ("a", "b", "c") und eine Daten Frame mit einer Spalte df $ stuff.

Ich möchte jede Zeichenfolge in der Liste durchlaufen, die Anzahl zählen, wie oft diese Zeichenfolge in df $ stuff angezeigt wird, und sie kumulativ hinzufügen. Mit anderen Worten, die Anzahl der Male "a" erscheint, plus die Anzahl der Male "b" erscheint, plus die Anzahl der Male "c" erscheint. Ich habe Zähl-, Tabellen- und Aggregatfunktionen ausprobiert, und alles, was ich bekomme, sind Fehler.

Es muss einfach eine schöne, saubere Art und Weise sein, dies zu tun.

+0

Willkommen bei Stack Overflow! Ich beantworte Ihre Frage jetzt so gut wie möglich, aber damit wir Ihre Frage beantworten können, fügen Sie bitte ein Beispiel Ihrer Daten ein, indem Sie 'dput (VariablenName)' eingeben und die Konsolenausgabe in Ihren kopieren und einfügen Frage in der Zukunft. Für weitere Informationen, wie man ein reproduzierbares Beispiel in "R" macht (und es wahrscheinlicher macht, dass Ihre Frage beantwortet wird), lesen Sie bitte [diesen Beitrag] (http://stackoverflow.com/questions/5963269/how-to-make- ein-groß-r-reproduzierbares Beispiel). – Barker

Antwort

0

Es ist schwierig, dies ohne eine Stichprobe Ihrer Daten zu beantworten und wie die Ausgabe aussehen soll, aber ich werde es versuchen. Zuerst werde ich eine Vermutung an, was Ihre Daten wie folgt aussehen:

df <- data.frame(stuff = sample(letters[1:5], 30, replace = TRUE)) 
strings <- letters[1:3] 

der Grafen von strings in df[["stuff"]] bekommen Sie table und dann Index in der Tabelle mit strings verwenden.

table(df[["stuff"]])[strings] 
+0

Diese Lösungen scheinen immer noch schrecklich komplex zu sein. Lassen Sie mich mit Beispieldaten klären: – TPL

0

Ich hatte eine andere Vorstellung davon, was gefragt wurde. Also werde ich es auch versuchen.

strings = c("a", "b", "c") 
stuff = c("the cat", "the bat", "the dog") 
sapply(strings, function(s) length(grep(s, stuff))) 
a b c 
2 1 1 

Ruft die Anzahl der Übereinstimmungen für jede Zeichenfolge ab. Also

sum(sapply(strings, function(s) length(grep(s, stuff)))) 

gibt Ihnen die Summe all dieser.

Wolltest du das?

+0

Danke, Jungs. Ihre Kommentare haben mir geholfen, es herauszufinden. Als ich die Tabellenfunktion für mein Dataset verwendet habe, war ich sehr verwirrt darüber, dass das Ergebnis den beschreibenden String zusammen mit dem Wert enthält. Zum Beispiel ist es nicht nur der Wert 6, es ist "Irgendeine Zeichenfolge, die ich hasse 6". Die doppelte eckige Klammernnotation lässt mich den Wert aus der Tabelle herausziehen. – TPL

+1

@TPL Wenn Sie eine Lösung gefunden haben, sollten Sie sie als Antwort posten, damit anderen mit dem gleichen Problem geholfen werden kann. – Barker

Verwandte Themen