【发布时间】:2018-10-20 14:58:53
【问题描述】:
我可以使用 tapply 函数进行基本操作(例如,使用 mtcars 数据,通过气缸数计算平均重量)。
library(data.table)
mtcars <- data.table(mtcars)
tapply(X = mtcars[,wt],
INDEX = mtcars[,cyl],
mean)
但是,我不知道如何执行更复杂的操作。例如。重量和 qsec 变量与气缸数之间的相关性。 我尝试了以下类似的方法,但它不起作用。
tapply(X = mtcars[,.(wt, qsec)],
INDEX = mtcars[,cyl],
cor.test(mtcars[,wt], mtcars[,qsec]))
Error in match.fun(FUN) : 'cor.test(mtcars[, wt], mtcars[, qsec])' is not a function, character or symbol
tapply(X = rownames(mtcars[,.(wt,qsec,cyl)]),
INDEX = mtcars[,cyl],
function(r) cor.test(mtcars[r, 1],
mtcars[r, 2])
知道如何使用 t/apply 函数有效地做到这一点吗?
【问题讨论】:
-
所以基本上你有一个 data.table 对象,整个想法是替换
tapply所做的事情,而不是使用它的功能来尝试在它上面运行tapply?对于您的第一个示例,这应该是mtcars[, mean(wt), by = cyl]。对于“更复杂的操作”,这应该是mtcars[, cor.test(wt, qsec), by = cyl] -
如果你想使用
tapply对行索引执行tapply操作:with(mtcars, tapply(1:nrow(mtcars), cyl, function(ix) cor.test(wt[ix], qsec[ix])))
标签: r data.table apply tapply