【问题标题】:Attempting to make series of data frames from levels of a factor column with a loop function尝试使用循环函数从因子列的级别制作一系列数据框
【发布时间】:2019-04-06 04:14:18
【问题描述】:

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

【问题讨论】:

  • 你想做的只是all_states &lt;- split(data,data$STATE)。您不希望它们在单独的数据框中,命名列表会更容易使用。
  • 这是有道理的。感谢您的帮助。

标签: r


【解决方案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 的值

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    • 1970-01-01
    • 2015-01-27
    相关资源
    最近更新 更多