我正在尝试根据 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)
来识别哪个类别属于哪个数据集。
我正在尝试划分我的(公司的)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)
来识别哪个类别属于哪个数据集。