2011-07-04 17 views
5

Czy można używać spacji w ddply?ddply i spacje w cytowanych zmiennych

Używam danych z arkusza kalkulacyjnego z dużą ilością spacji w nazwach kolumn i chcę zachować te nazwy, ponieważ później chcę wyeksportować te dane z tymi samymi nazwami kolumn co oryginał. Istnieje ponad 200 kolumn, a użycie make.names oczywiście da mi odpowiednie nazwy, ale potem utracę oryginalne nazwy kolumn.

Jednak wydaje się, że ddply nie lubi przestrzeni? Czy jest w pobliżu praca?

lev=gl(2, 3, labels=c("low", "high")) 
df=data.frame(factor=lev, "fac tor"=lev, response=1:6, check.names = FALSE) 

> ddply(df, c("factor"), summarize, r.avg=mean(response)) 
factor r.avg 
1 low  2 
2 high  5 

> ddply(df, c("fac tor"), summarize, r.avg=mean(response)) 
Error in parse(text = x) : <text>:1:5: unexpected symbol 
: fac tor 
+1

Chyba chodziło 'check.names = FALSE się powyżej. "TRUE" wymusza na "fac.tor" wymuszenie – Chase

+0

rzeczywiście powinno być FALSE – Johan

Odpowiedz

8

Owijanie nazw kolumn w pojedyncze tyknięcia (`) wydaje się działać.

ddply(df, "`fac tor`", summarize, r.avg=mean(response)) 

Można również użyć indeksów kolumn, które mogą lub nie mogą być atrakcyjne w zależności od tego, jak duży jest Twój data.frame i swoją wiedzę o lokalizacji każdej kolumnie wcześniej.

ddply(df, 2, summarize, r.avg=mean(response)) 
+0

+1 Tak, za pomocą backticks jest drogą do zrobienia. FYI, plyr udostępnia funkcję '.()', Która pozwala na określenie nazw kolumn bez konieczności ich cytowania. Więc wolałbym napisać 'ddply (df,. (\" Fac tor "), podsumuj, r.avg = mean (odpowiedź))' – Andrie

+0

Dzięki, to jest dokładnie to, czego potrzebuję. – Johan

1

chciałbym po prostu użyć wyrażenia regularnego do przekształcania przestrzeni do pewnego charakteru nonsens, a następnie przekształcić z powrotem na koniec:

lev=gl(2, 3, labels=c("low", "high")) 
df=data.frame(factor=lev, "fac tor"=lev, response=1:6, check.names = FALSE) 
colnames(df) <- gsub(" ","~",colnames(df)) 
Powiązane problemy