Frage

Ich habe einen Datenrahmen mit ungefähr 40 Spalten, der zweiten Spalte, Daten [2] den Namen des Unternehmens, den die restlichen Zeilendaten beschreiben. Die Namen der Unternehmen unterscheiden sich jedoch je nach Jahr (Rückstand von 09 für Daten 2009, nichts für 2010).

Ich möchte in der Lage sein, die Daten so zu untermengen, dass ich beide Jahre gleichzeitig ziehen kann. Hier ist ein Beispiel für das, was ich versuche zu tun ...

subset(data, data[2] == "Company Name 09" | "Company Name", drop = T) 

Im Wesentlichen habe ich Schwierigkeiten, den oder den Operator innerhalb der Teilmengenfunktion zu verwenden.

Ich habe jedoch andere Alternativen ausprobiert:

subset(data, data[[2]] == grep("Company Name", data[[2]]))

Vielleicht gibt es eine einfachere Möglichkeit, dies mit einer String -Funktion zu tun?

Alle Gedanken wären gepflegt.

War es hilfreich?

Lösung

Zuallererst (wie Jonathan in seinem Kommentar getan hat), sollten Sie sich entweder verwenden data[[2]] oder data[,2]. Wenn Sie jedoch die Teilmenge verwenden, können Sie den Spaltennamen verwenden: subset(data, CompanyName == ...).

Und für Ihre Frage werde ich einen von: tun:

subset(data, data[[2]] %in% c("Company Name 09", "Company Name"), drop = TRUE) 
subset(data, grepl("^Company Name", data[[2]]), drop = TRUE)

In der Sekunde benutze ich grepl (eingeführt mit R Version 2.9), der einen logischen Vektor mit zurückgibt mit TRUE für Match.

Andere Tipps

Ein paar Dinge:

1) Modelldaten sind nützlich, da wir nicht genau wissen, was Sie konfrontiert sind. Bitte geben Sie nach Möglichkeit Daten an. Vielleicht habe ich in dem, was folgt, missverstanden?

2) Verwenden Sie nicht [[2]] Um Ihre Daten zu indizieren.Frame, denke ich [, "Colname"] ist viel klarer

3) Wenn der einzige Unterschied ein nachfolgendes '09' im Namen ist, dann richten Sie einfach das aus:

R> x1 <- c("foo 09", "bar", "bar 09", "foo")
R> x2 <- gsub(" 09$", "", x1)
[1] "foo" "bar" "bar" "foo"
R> 

Jetzt sollten Sie in der Lage sein, Ihre Teilmenge auf den transformierten Daten im lahenvertretenden Daten durchzuführen:

R> data <- data.frame(value=1:4, name=x1)
R> subset(data, gsub(" 09$", "", name)=="foo")
  value   name
1     1 foo 09
4     4    foo
R> 

Sie können auch die Spalte Name durch Regexp'ed -Wert ersetzen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top