2011-07-04 74 views
5

是否可以在ddply中使用空格?ddply和空格在引用變量中

我使用的電子表格中的數據來自列名中有很多空格,我想保留這些名稱,因爲後來我想用與原始列名相同的列名導出此數據。有200多列,使用make.names當然會給我合適的名字,但是我失去了原來的列名。

但ddply似乎不喜歡空格?有沒有解決方法?

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

我認爲你的意思'check.names =以上FALSE'起來。 'TRUE'強制強制轉換爲'fac.tor' – Chase

+0

確實應該是FALSE – Johan

回答

8

在單個返回蜱(`)中包裝列名似乎有訣竅。

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

你也可以使用列索引可能會或可能不會根據您的data.frame有多大,你的每列的位置的知識事先吸引力。

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

+1是的,使用反引號是一種可行的方法。僅供參考,plyr提供'。()'函數,允許您指定列名而不必引用它們。所以我寧願寫'ddply(df,。(\'fac tor \'),總結,r.avg = mean(response))' – Andrie

+0

謝謝,這正是我需要的。 – Johan

1

我只想用正則表達式的空間轉換爲一些廢話字符,然後轉換回底:

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))