2015-09-04 31 views
0

我希望能夠爲dcast(reshape2包)編寫一個簡單的包裝函數,以便能夠讀取文件,重新塑形並寫出到不同的文件。起皺的是,我通常不會知道字段名稱提前,我只知道我想要前2列,並且有第3列名爲'count'。功能我想要是這樣的。reshape2:將參數傳遞給dcast

function reshapeAndWrite(path, target) 
{ 
    require(reshape2) 

    data = read.csv(path) 
    fields = colnames(data) 
    data_reshape = dcast(data, fields[1] ~ fields[2], value.var = count) 
    write.csv(data_reshape, target) 
} 

然而,dcast解釋字段[1]和字段[2]作爲字符串(即主叫dcast(數據 「VAR1」 〜 「VAR2」)代替dcast(數據,VAR1〜VAR2)。如何能我通過了列名中的一個:

我試過了:as.name()/ as.symbol()和eval(),parse(),deparse()和substitute()的各種組合。

這個問題的答案也許可以推廣到哈德利宇宙中的其他包裹。

在此先感謝您的幫助!

回答

0

dcast將「公式」作爲參數之一。因此,作爲一箇中間步驟,您可以使用您的姓名創建一個公式字符串,並將其放入到dcast的調用中:

data <- expand.grid(a=LETTERS[1:5],b=c("A","B")) 
data$count=1:10 

fields <- colnames(data) 
casting_formula = sprintf("%s ~ %s", fields[1],fields[2]) 

dcast(data=data,value.var="count",formula=casting_formula) 



    a A B 
1 A 1 6 
2 B 2 7 
3 C 3 8 
4 D 4 9 
5 E 5 10 
+0

這樣做 - 謝謝! –