我的数据集包括每个州每年的教育数据。我想做一个循环,为每个包含原始数据集中所有列的状态创建数据帧。一个主键的示例是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”的数据框,其中包含怀俄明州的所有行。它没有正确命名,在其他任何州都没有发生。
答案 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的值