2012-02-14 16 views

Odpowiedz

71
which(colnames(df)=="b") 

Należy to zrobić.

53

Jeden szybki i czysty sposób jest następujący:

> match("b",names(df)) 
[1] 2 

To unika wektor skanowanie że == i which zrobić. Jeśli masz dużo kolumn i robisz to bardzo często, możesz polubić fastmatch package.

> require(fastmatch) 
> fmatch("b",names(df)) 
[1] 2 

fmatch jest szybszy niż match, ale na kolejnych rozmów to nie tylko szybciej, to natychmiastowe.

+1

Jeśli Używam tylko jednej zmiennej (jedna kolumna), "dopasuj" i "która" obie działają równie dobrze dla mnie. Jeśli jednak używam więcej niż jednej zmiennej, "która" wyrzuca błędy, a "dopasowanie" nie daje mi błędów. Tak więc w mojej sytuacji "mecz" jest lepszym wyborem. Dzięki! –

9

Inną metodą, która uogólnia lepiej niż dokładnych zadań dopasowywania jest użycie grep:

grep("^b$", colnames(df)) 

Jeśli chciał liczbę wszystkich nazw kolumn, które zaczynają się od „b” do usunięcia, byś napisać :

df[ , - grep("^b", colnames(df))] 

To dokładnie ogranicza problem, który uniemożliwia indeksowanie ujemne wektorami znakowymi.

7

..especially, jeśli trzeba dostać kilka indeksów kolumn poniżej podejście obowiązuje:

> df <- data.frame(a=rnorm(100),b=rnorm(100),c=rnorm(100)) 
> which(names(df)%in%c("b", "c")) 
[1] 2 3 

jeśli używasz to dla podzbioru df nie trzeba którego()

> df_sub <- df[, names(df)%in%c("b", "c")] 
> head(df_sub) 
      b   c 
1 0.1712754 0.3119079 
2 -1.3656995 0.7111664 
3 -0.2176488 0.7714348 
4 -0.6599826 -0.3528118 
5 0.4510227 -1.6438053 
6 0.2451216 2.5305453 
Powiązane problemy