R 在函数中正确使用dcast.table.table
如何将dcast.data.table正确嵌入到函数中 我想写一个函数,其中使用dcast.data.table命令。函数应该做的一件事是将data.frame转换为data.table。在那之后,它应该对表进行dcast 以此数据帧为例:R 在函数中正确使用dcast.table.table,r,data.table,R,Data.table,如何将dcast.data.table正确嵌入到函数中 我想写一个函数,其中使用dcast.data.table命令。函数应该做的一件事是将data.frame转换为data.table。在那之后,它应该对表进行dcast 以此数据帧为例: test <-data.frame(lett=c("a", "b", "c", "c", "d", "d", "e&quo
test <-data.frame(lett=c("a", "b", "c", "c", "d", "d", "e"),
group=c(1,1,1,3,3,4,4),
perc=sample(1:100,7))
lett group perc
1 a 1 71
2 b 1 87
3 c 1 36
4 c 3 39
5 d 3 4
6 d 4 20
7 e 4 16
您的函数有问题,它需要4个参数,但您只能用一个参数调用它。 但是,此功能将起作用
myfunction <- function(d) {
d <- setDT(as.list(d))
formula <- as.formula(paste(names(d)[1],"~",names(d)[2]))
temp <- dcast.data.table(d, formula ,value.var=names(d)[3])
return(temp)
}
我想我找到了解决问题的办法:
myfunction <- function(d=NULL, y,z,v)
{y<-eval(substitute(y),d, parent.frame())
z<-eval(substitute(z),d, parent.frame())
v<-eval(substitute(v),d, parent.frame())
d.temp <- data.table(y=y,z=z,v=v)
temp <- dcast.data.table(d.temp, y~z,
value.var="v")
return(temp)
}
myfunction(test, lett, group, perc)
你这样做到底节省了什么?您仍然需要键入数据集名称、LHS、RHS和value变量。要使其工作,您必须在函数中构造和计算公式。ddt我更正了上面的函数。只是忘记添加其他参数。*我喜欢@PeterK建议的答案,但我希望有一个独立于索引号的函数,这样可以灵活地提供列名。
myfunction(test,lett,group,perc)
myfunction <- function(d) {
d <- setDT(as.list(d))
formula <- as.formula(paste(names(d)[1],"~",names(d)[2]))
temp <- dcast.data.table(d, formula ,value.var=names(d)[3])
return(temp)
}
myfunction <- function(d=NULL, y,z,v)
{y<-eval(substitute(y),d, parent.frame())
z<-eval(substitute(z),d, parent.frame())
v<-eval(substitute(v),d, parent.frame())
d.temp <- data.table(y=y,z=z,v=v)
temp <- dcast.data.table(d.temp, y~z,
value.var="v")
return(temp)
}
myfunction(test, lett, group, perc)
y 1 3 4
1: a 14 NA NA
2: b 97 NA NA
3: c 93 9 NA
4: d NA 67 86
5: e NA NA 72