我正在尝试清理这段代码,想知道是否有人对如何在没有循环的情况下在 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))
#------------------------------------------------#