我只希望能够为dcast (reshape2包)编写一个简单的包装器函数,以便能够读取文件、整形和写入不同的文件。缺点是我通常不会提前知道字段名,我只知道我想要前2列,还有第3列叫做“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将fields1和fields2解释为字符串(即调用dcast(data," var1“~ "var2")而不是dcast(data,var1~ var2) )。如何传递列名。
我已经尝试过:as.name()、/as.symbol()和各种各样的组合,包括eval()、parse()、parse()和substitute()。
这个问题的答案可能也可以推广到哈德利宇宙中的其他软件包。
提前感谢您的帮助!
发布于 2015-09-04 20:42:50
dcast的论点之一是“公式”。因此,作为中间步骤,您可以使用您的colname创建一个公式字符串,并将其放在对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 10https://stackoverflow.com/questions/32406221
复制相似问题