【发布时间】:2012-12-10 00:27:31
【问题描述】:
我正在尝试清理此代码,并想知道是否有人对如何在 R 中不循环运行它有任何建议。我有一个名为 data 的数据集,其中包含 100 个变量和 200,000 个观察值。我想要做的基本上是通过将每个观察值乘以特定标量来扩展数据集,然后将数据组合在一起。最后,我需要一个包含 800,000 个观察值(我要创建四个类别)和 101 个变量的数据集。这是我写的一个循环,它可以做到这一点,但它的效率非常低,我想要更快更高效的东西。
datanew <- c()
for (i in 1:51){
for (k in 1:6){
for (m in 1:4){
sub <- subset(data,data$var1==i & data$var2==k)
sub[,4:(ncol(sub)-1)] <- filingstat0711[i,k,m]*sub[,4:(ncol(sub)-1)]
sub$newvar <- m
datanew <- rbind(datanew,sub)
}
}
}
请让我知道您的想法并感谢您的帮助。
以下是一些具有 2K 观测值而不是 200K 的样本数据
# SAMPLE DATA
#------------------------------------------------#
mydf <- as.data.frame(matrix(rnorm(100 * 20e2), ncol=20e2, nrow=100))
var1 <- c(sapply(seq(41), function(x) sample(1:51)))[1:20e2]
var2 <- c(sapply(seq(2 + 20e2/6), function(x) sample(1:6)))[1:20e2]
#----------------------------------#
mydf <- cbind(var1, var2, round(mydf[3:100]*2.5, 2))
filingstat0711 <- array(round(rnorm(51*6*4)*1.5 + abs(rnorm(2)*10)), dim=c(51,6,4))
#------------------------------------------------#
【问题讨论】:
-
请帮助我们帮助您,通过 (1) 发布一些示例数据,以及 (2) 用文字解释您希望在这里完成的工作。另请注意,您不需要引用您在
subset中设置子集的 data.frame。
标签: r for-loop vectorization