尝试使用循环功能从因子列的级别制作一系列数据帧

时间:2019-03-28 19:32:01

标签: r

我的数据集包括每个州每年的教育数据。我想做一个循环,为每个包含原始数据集中所有列的状态创建数据帧。一个主键的示例是1992_ALABAMA。我想为阿拉巴马州创建一个数据框架,将所有年份结合起来,并在每个州重复此操作,而不必手动创建每个数据框架。

我尝试创建一个循环,该循环使用状态因子列的所有级别,并为每一列分配针对该特定因子的相关行。

# this is how I did this manually for Alabama:
alabama <- data[which(data$STATE == "ALABAMA"),]


# this is the loop I am trying to use. stLevels is a character vector     
# containing all of the levels of the state factor column.
for (i in stLevels) {
  i <- data[which(data$STATE == i),]
}
我希望有80个数据帧以它们的适当状态命名,其中包含该状态的所有观察结果。发生的情况是创建了一个名为“ i”的数据框,其中包含怀俄明州的所有行。它没有正确命名,在其他任何州都没有发生。

1 个答案:

答案 0 :(得分:-1)

我会这样:

state_dataframes = lapply(stLevels, function(x){data[data$STATE == x,]})
names(state_dataframes) = stLevels

这将创建一个包含所有所需子集的列表。您可以通过致电state_dataframes[['ALABAMA']]来访问它们,如果您确实想按照自己的方式去做,可以这样做:

for(i in stLevels){
  assign(x = gsub(x = deparse(i), pattern = '\\"', replacement = ''), 
         value = data[which(data$STATE == i),],
         envir = globalenv())
}

assign将名称与对象相关联
gsub从名称中删除引号
deparse在每次迭代中获取i的值