我正在尝试根据 R 中的类别从一个数据帧创建多个数据帧。使用循环,但只保留最后一次迭代

I'm trying to create several dataframes from one, based on category in R. Using a loop, but only last itterations are kept

我正在尝试划分我的(公司的)df,以便我根据部门创建新的数据框。 假设我有三个部门:工业、IT、医疗保健。我创建了一个包含扇区的列: Df[, ncol(Df)+1] <- x$sector.

然后我尝试循环 df 以获取新帧:

IT = NULL
Industry = NULL
Health = NULL 

for (i in 1:nrow(df)) {
  if (df[i, ncol(df)] == "IT") {
      IT<- df[i, ]
  }
  else if (df[i, ncol(df)] == "Industry") {
      Industry <- df[i, ]
  }
  else if (df[i, ncol(df)] == "Healthcare") {
        Health <- df[i, ]
  }
}

然而,新数据框(IT、工业和医疗保健)仅包含最后一次迭代,因此每个 df 仅包含一个观察值。我在这里错过了什么?是否可以通过循环实现此目的,还是我应该在这里使用其他方法?

您需要在整个循环中累积结果。这样的事情将与您的原始代码保持一致:

IT = NULL
Industry = NULL
Health = NULL 

for (i in 1:nrow(df)) {
  if (df[i, ncol(df)] == "IT") {
    IT<- rbind(IT, df[i, ])
  }
  else if (df[i, ncol(df)] == "Industry") {
    Industry <- rbind(Industry, df[i, ])
  }
  else if (df[i, ncol(df)] == "Healthcare") {
    Health <- rbind(Health, df[i, ])
  }
}

也就是说,您可以通过以下方式更轻松地完成此任务:

dats <- split(DF, x$sector)
dat1 <- dats[[1]]
dat2 <- dats[[2]]
dat3 <- dats[[3]]

您应该能够通过查看 names(dats) 来识别哪个类别属于哪个数据集。