首页 > 解决方案 > 从R中的列表中提取数据框

问题描述

我正在尝试从列表(由所有县的数据组成)中将单个县作为数据框提取为 R 中的单独数据框。我的代码如下所示,为了便于说明,我将进入第 1 步(提取从 URL 到列表的数据 - 这部分效果很好)第 2 步(从列表中提取单个 data.frames - 这效果不好,并且给出了一个只有最后一个列表项的单个列表)

## Step 1: Extract data from URL 
library(data.table)

# List of counties (just a sample here)
x <- data.frame(county = c("12001", "12003", "12005"))

idx <- x$county

#Extract data from URL for list of counties
  qcew_q1 <- lapply((1:nrow(x)),function(area) {
  url <- "http://data.bls.gov/cew/data/api/YEAR/QTR/area/AREA.csv"
  url <- sub("YEAR", 2020, url, ignore.case=FALSE)
  url <- sub("QTR", 1, url, ignore.case=FALSE)
  url <- sub("AREA",idx[area] , url, ignore.case=FALSE)
  fread(url, header = TRUE, sep = ",", quote="\"", dec=".", na.strings="", skip=0)
  
}
)

一旦我将数据从 URL 提取到列表中,我就会尝试将各个县提取为单独的数据框。这是导致问题的部分,它只给出最后一项并将其写入列表而不是 data.frame。任何见解将不胜感激。

## Step 2: Extract data from step 1 as separate data frames. 
## Writes only last list (12005) to another list.

#Using For statement
for(c in 1:nrow(x)){
  for(i in 1:3){
  q1_idx[c] <- qcew_q1[i]
}
}

# Using lapply
lapply(1:nrow(x),function(cnty){
  for(i in 1:3){
    q1_idx[cnty] <- qcew_q1[i]
  
  }
})

任何有关如何解决此问题的见解将不胜感激。

TIA,

克里希南

标签: rlistdataframeloops

解决方案


您有数据框列表,qcew_q1如果您想对其进行任何进一步的分析,最好保留它们。更易于管理,不污染全球环境。也许为了澄清哪个数据框来自哪个县,您可以为它们分配名称。

names(qcew_q1) <- x$county

如果您想要一个特定的县数据框,您可以将其提取为qcew_q1[['12001']]qcew_q1[['12003']]。您可以使用lapply迭代列表并将函数应用于每个单独的数据帧。

如果您仍需要全局环境中的单个数据框,请根据您的选择为它们分配名称并使用list2env.

names(qcew_q1) <- paste0('county_', x$county)
list2env(qcew_q1, .GlobalEnv)

各个数据帧现在称为county_12001county_12003


推荐阅读