2015-09-04 3 views
0

Я хочу просто написать простую функцию-обертку для dcast (пакет reshape2), чтобы иметь возможность читать в файле, изменять форму и записывать в другой файл. Морщина заключается в том, что я обычно не знаю, имена полей раньше времени, я просто знаю, что мне нужны первые 2 столбца, и что есть 3-й столбец с именем «count». Функция I хочу что-то вроде этого.reshape2: Передача args в 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().

ответ на этот вопрос, вероятно, может быть обобщена на другие пакеты во вселенной Hadley тоже.

заранее спасибо за помощь!

ответ

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

Это сделало это - спасибо! –

Смежные вопросы