r - 从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,
克里希南
解决方案
您有数据框列表,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_12001
等county_12003
。
推荐阅读
- json - 如何异步读取和处理多个 JSON API 响应?
- javascript - React 如何只更新真实 DOM 树的单个部分?
- python - 机器人框架 Selenium2Library 获取 WebDriver 实例
- linux - 减少 Chrome (Chromium) 内存使用
- sql - 无法使用替换功能删除 SQL 表上的空白空间
- amazon-web-services - 在没有 SES 的情况下在 AWS 中负载平衡 Postfix?
- java - 当应用程序发送到后台时如何设置空白屏幕
- c++ - 如何从四面体网格中提取表面三角形?
- javascript - 如何显示本地存储的返回的道具值?
- docker - Docker 中的电子:SIGTRAP、ELIFECYCLE、errno1