私はこのコードをクリーンアップしようとしていますが、ループなしで R でこれを実行する方法について何か提案があるかどうか疑問に思っていました。100 個の変数と 200,000 個の観測値を持つ data というデータセットがあります。私がやりたいことは、基本的に、各観測値に特定のスカラーを掛けてデータセットを拡張し、データを結合することです。最終的に、800,000 件の観測 (作成するカテゴリが 4 つある) と 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)
}
}
}
ご意見をお聞かせください。ご協力いただきありがとうございます。
以下は、200K ではなく 2K の観測値を含むサンプル データです。
# 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))
#------------------------------------------------#