我希望能够为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宇宙中的其他包。
提前感谢您的帮助!
答案 0 :(得分:1)
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