reshape2:将args传递给dcast

时间:2015-09-04 20:36:41

标签: r reshape2

我希望能够为dcast(reshape2包)编写一个简单的包装函数,以便能够读取文件,重新整形和写出不同的文件。皱纹是因为我通常不知道字段名称是提前知道的,我只知道我想要前两列,并且第三列名为' count'。我想要的功能是这样的。

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宇宙中的其他包。

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

dcast将'公式'作为其中一个论点。因此,作为一个中间步骤,您可以使用您的colnames创建一个公式字符串,并将其放入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