1

我有以下数据结构。

dat <- as.data.table(cbind(var1=rep(1:5, 200), 
var2=rep(c("gp1", "gp2"), each=500), 
as.data.frame(matrix(rnorm(5000, 0, 1),ncol=5))))

我想做的是在按 var1 分组的 gp1 和 gp2 之间执行 t.test。当只有一列数据使用以下内容时,我已经阅读了其他一些帖子:

dat[, .(p.value = t.test(V1 ~ var2, .SD)$p.val), by=.(var1)]

我一生无法弄清楚的是如何在所有其他列(即 V2 到 V5)上做到这一点。这些小插曲有助于指出使用 lapply(.SD, somefunction) 来迭代列,但在这种情况下,我不太确定如何让它为我工作。

上面的示例是一个玩具示例,我实际上正在处理数百万行数据和数百列,所以速度是一个问题。我目前正在使用嵌套应用来遍历行和列,并且该函数需要数小时才能运行。我希望有更快的东西。

如果我可以在 2 个不同的 data.tables 之间执行此操作,那就更好了。(即 gp1 在它自己的 data.table 中,而 gp2 在另一个中)。

R 的长期用户,在 data.table 方面是菜鸟。

任何想法都会非常有帮助。

谢谢,肯

4

0 回答 0