【问题标题】:Extract Data Frames from List in R从R中的列表中提取数据框
【发布时间】:2021-03-01 04:10:14
【问题描述】:

我正在尝试将单个县作为数据框从列表(由所有县的数据组成)中提取为 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,

克里希南

【问题讨论】:

    标签: r list dataframe loops


    【解决方案1】:

    您在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 等。

    【讨论】:

      猜你喜欢
      • 2021-11-27
      • 2015-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-26
      • 1970-01-01
      • 1970-01-01
      • 2022-01-13
      相关资源
      最近更新 更多