小编mjd*_*dub的帖子

如何在 R 中向量化 for 循环

我正在尝试清理这段代码,并且想知道是否有人对如何在 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)

    }
  }
}
Run Code Online (Sandbox Code Playgroud)

请让我知道您的想法并感谢您的帮助。

下面是一些具有 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, …
Run Code Online (Sandbox Code Playgroud)

for-loop r vectorization

5
推荐指数
1
解决办法
8830
查看次数

R通过lapply命令从多次回归中提取回归系数

我有一个包含多个变量的大型数据集,其中一个是状态变量,每个状态编码1-50.我想在数据集的其余27个变量上运行28个变量的回归(总共有55个变量),并且对每个状态都是特定的.

换句话说,在covariate1,covariate2,...,covariate27上运行variable1的回归,用于状态== 1的观察.然后,我想为状态2-50的变量1重复此操作,并重复变量2,变量3,...,变量28的整个过程.

我想我已经编写了正确的R代码来做到这一点,但接下来我要做的是提取系数,理想情况下是系数矩阵.有人可以帮我这个吗?这是我到目前为止编写的代码:

for (num in 1:50) {

    #PUF is the data set I'm using

    #Subset the data by states
    PUFnum <- subset(PUF, state==num)

    #Attach data set with state specific data
    attach(PUFnum)

    #Run our prediction regression
    #the variables class1 through e19700 are the 27 covariates I want to use
    regression <- lapply(PUFnum,  function(z) lm(z ~ class1+class2+class3+class4+class5+class6+class7+
                                                     xtot+e00200+e00300+e00600+e00900+e01000+p04470+e04800+
                                                     e09600+e07180+e07220+e07260+e06500+e10300+
                                                     e59720+e11900+e18425+e18450+e18500+e19700))

    Beta <- lapply(regression, function(d) d<- coef(regression$d))


    detach(PUFnum)
}
Run Code Online (Sandbox Code Playgroud)

r linear-regression lapply

2
推荐指数
1
解决办法
3556
查看次数

在R中向量化一个for循环

我正在使用一个包含大约300万个观测值的非常大的数据集,而且如果它们符合特定要求,我想要完成并基本上将某些观测结合起来.我在下面写了一个for循环来做这个,但效率非常低.是否有一种更有效的方式,例如使用apply函数或其他东西,可以改善这一点?

nobs <- nrow(acsdata)

for (i in 2:nobs){

  if (acsdata[i,6]==1 & acsdata[(i-1),6]==1) acsdata[(i-1),3]=2  

  if (acsdata[i,6]==1 & acsdata[(i-1),6]==1) acsdata[(i-1),21:30]=acsdata[(i-1),21:30]+acsdata[i,21:30]

  if (acsdata[i,6]==1 & acsdata[(i-1),6]==1) acsdata[(i),31]=1

}
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激.谢谢!

loops for-loop r vectorization

1
推荐指数
1
解决办法
185
查看次数

标签 统计

r ×3

for-loop ×2

vectorization ×2

lapply ×1

linear-regression ×1

loops ×1