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
我只想为 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