reshape2:将 args 传递给 dcast

reshape2: Passing args to dcast

我只想为 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 将 fields[1] 和 fields[2] 解释为字符串(即调用 dcast(data, "var1" ~ "var2") 而不是 dcast(data, var1 ~ var2)。如何在 .

中传递列名

我试过:as.name()/as.symbol() 以及 eval()、parse()、deparse() 和 substitute() 的各种组合。

这个问题的答案可能也适用于 Hadley 宇宙中的其他包。

在此先感谢您的帮助!

dcast 将 'formula' 作为参数之一。因此,作为一个中间步骤,您可以使用您的 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