ich einen Datenrahmen haben, die wie folgt aussieht:Filter R Datenrahmen, um nur Reihen mit einem Abstand zwischen zwei Zeichenketten
v1 <- c('abies balsamifera','some trees','pizza','i like tacos','pinus taeda')
v2 <- c(1,2,3,4,5)
data <- data.frame(v1,v2)
v1 v2
1 abies balsamifera 1
2 some trees 2
3 pizza 3
4 i like tacos 4
5 pinus taeda 5
Ich möchte die Datenrahmen der Teilmenge, nur mit Zeilen, in denen die Zeichenketten in v1
habe zwei Wörter, die durch ein Leerzeichen getrennt sind. Ich möchte Zeilen ausschließen, die nur ein Wort enthalten, oder andere Zeilen, die drei Wörter enthalten. Die sich ergebende Datenrahmen würde wie folgt aussehen:
v1 v2
1 abies balsamifera 1
2 some trees 2
5 pinus taeda 5
Sie können den Code vereinfachen und besser lesbar machen. Zuerst, statt dieser 'if'-Anweisung, weise einfach direkt zu: 'booleans [i] <- length (tmp) == 2'. Zweitens gibt es keinen Grund, den "booleschen" Vektor an den Datenrahmen zu binden, sondern einfach "res $" in der letzten 'return' Zeile der Funktion zu entfernen. Dann müssen Sie diese Spalte nicht entfernen, indem Sie 'NULL' zuweisen. Und drittens, als ein separates Problem, können Sie den 'booleschen' Vektor so erstellen, dass er die richtige Länge hat, da Sie wissen, dass er zu' nrow (data) 'Elementen anwachsen wird. –
@MatthewLundberg Danke für die Überprüfung des Codes-- Ich habe diesen Code schnell geschrieben, um eine Antwort zu bekommen (ich benutze SO, um ein besserer Programmierer zu werden), aber ich habe es später angeschaut und viele unnötige Operationen bemerkt. Ich werde deine Empfehlungen verwenden. Ich schätze deine Zeit sehr! –