Domanda

Ho un frame di dati con circa 40 colonne, la seconda colonna, dati [2] contiene il nome dell'azienda che il resto dei dati di riga descrive. Tuttavia, i nomi delle società sono diversi a seconda dell'anno (trascinando 09 per i dati del 2009, nulla per il 2010).

Vorrei essere in grado di sottolineare i dati in modo tale da poter tirare in entrambi gli anni contemporaneamente. Ecco un esempio di quello che sto cercando di fare ...

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

In sostanza, ho difficoltà a usare l'operatore all'interno della funzione del sottoinsieme.

Tuttavia, ho provato altre alternative:

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

Forse c'è un modo più semplice per farlo usando una funzione di stringa?

Qualsiasi pensiero verrebbe apprezzato.

È stato utile?

Soluzione

Prima di tutto (come Jonathan ha fatto nel suo commento) per fare riferimento alla seconda colonna che dovresti usare data[[2]] o data[,2]. Ma se si utilizza il sottoinsieme è possibile utilizzare il nome della colonna: subset(data, CompanyName == ...).

E per la tua domanda farò uno di:

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

In secondo luogo uso grepl (introdotto con R versione 2.9) che restituiscono il vettore logico con TRUE per la partita.

Altri suggerimenti

Un paio di cose:

1) I dati del mock-up sono utili in quanto non sappiamo esattamente cosa ti trovi di fronte. Si prega di fornire dati se possibile. Forse sono stato frainteso in ciò che segue?

2) Non usare [[2]] Per indicizzare il tuo data.rame, penso che [, "colname"] sia molto più chiaro

3) Se l'unica differenza è un trailing '09' nel nome, allora regali semplicemente:

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

Ora dovresti essere in grado di eseguire il tuo sottoinsieme sui dati trasformati al volo:

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> 

È inoltre possibile sostituire la colonna Nome con il valore di Regexp'ed.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top