我在 R 中有一个我绝对无法解决的 read.csv() 错误。
我做了什么:我从 https://www.finra.org/finra-data/browse-catalog/equity-short-interest/data 下载了一个 .zip 文件(我将日期设置为 2019-01-01 到2019-12-31 和 Market = NYSE 的过滤器;之后我单击“导出”)。我在我的 Macbook 上打开了 .zip 文件,现在我的下载文件夹中有 .csv 文件。我将文件重命名为“equityshortinterest_2019.csv”。
现在我做到了
Short_Interest <- read.csv("~/Downloads/equityshortinterest_2019.csv")
得到这个错误
Warning: cannot open file '/Users/macbook/Downloads/equityshortinterest_2019.csv': Operation not permittedError in file(file, "rt") : cannot open the connection
我的下载文件夹中的其他.csv文件可以这样打开!我检查了文件的权限,我有读写权限。我也尝试了其他方法来打开 csv,但都给了我同样的错误。
有人知道如何解决这个问题吗?提前致谢!
您看到的问题不太可能与 R 相关(例如,您是否在其他程序中打开了文件?),但对于更强大的工作流程,您可能希望将外部数据集保留在 RStudio 项目文件夹中。如果你不使用项目,你可能应该,你会得到可靠的相对路径。
和/或尽可能自动化,即不要手动提取 zip 存档并重命名生成的文件,而是使用类似这样的东西:
# In Windows, "~" refers to "username/Documents" by default
archive <- "~/../Downloads/equityshortinterest.zip"
file.exists(archive)
#> [1] TRUE
# unzip(..., list = TRUE) returns dataframe with zip content,
# [1,1] is Name of the first file
df_ <- unz(archive, unzip(archive, list = TRUE)[1,1]) |> read.csv()
或者只对存档本身使用
readr::read_csv()
;假设 zip 中有一个 CSV,它将为您处理提取:
readr::read_csv(archive)
#> Rows: 73942 Columns: 11
#> ── Column specification ────────────────────────────────────────────────────────
#> Delimiter: ","
#> chr (4): Issue Name, Symbol, Market, Revision Flag
#> dbl (6): Current Short, Previous Short, Chg, % Change from Previous, Avg Da...
#> date (1): Settlement Date
#>
#> ℹ Use `spec()` to retrieve the full column specification for this data.
#> ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
#> # A tibble: 73,942 × 11
#> `Settlement Date` `Issue Name` Symbol Market `Current Short` `Previous Short`
#> <date> <chr> <chr> <chr> <dbl> <dbl>
#> 1 2019-12-31 3D Systems … DDD NYSE 23804548 23954237
#> 2 2019-12-31 3M Company MMM NYSE 9949341 9957296
#> 3 2019-12-31 500.com Lim… WBAI NYSE 2509504 2563847
# ...
#> # ℹ 73,932 more rows
#> # ℹ 5 more variables: Chg <dbl>, `% Change from Previous` <dbl>,
#> # `Avg Daily Vol` <dbl>, `Days to Cover` <dbl>, `Revision Flag` <chr>
对于下载自动化
httr
/httr2
就足够了:
library(httr2)
# extract cURL request from browser's dev tools and pass it to
# httr2::curl_translate() for quick and dirty httr2 prototype
dest <- tempfile(fileext = ".zip")
request("https://services-dynarep.ddwa.finra.org/public/reporting/v2/data/export/group/OTCMarket/name/ConsolidatedShortInterest") %>%
req_headers(`content-type` = "application/json") %>%
req_body_raw('{"aggregationFilter":null,"arrayFields":[],"compareFilters":[{"fieldName":"marketClassCode","fieldValue":"NYSE","compareType":"EQUAL"}],"dateRangeFilters":[{"fieldName":"settlementDate","startDate":"2019-01-01","endDate":"2019-01-15"}],"delimiter":null,"domainFilters":[],"fileName":"equityshortinterest.csv","fileType":"CSV","groupFields":[],"limit":5000,"mainFields":[{"id":"settlementDate","displayName":"Settlement Date","include":true,"primary":false},{"id":"issueName","displayName":"Issue Name","include":true,"primary":false},{"id":"symbolCode","displayName":"Symbol","include":true,"primary":false},{"id":"marketClassCode","displayName":"Market","include":true,"primary":false},{"id":"currentShortPositionQuantity","displayName":"Current Short","include":true,"primary":false},{"id":"previousShortPositionQuantity","displayName":"Previous Short","include":true,"primary":false},{"id":"changePreviousNumber","displayName":"Chg","include":true,"primary":false},{"id":"changePercent","displayName":"% Change from Previous","include":true,"primary":false},{"id":"averageDailyVolumeQuantity","displayName":"Avg Daily Vol","include":true,"primary":false},{"id":"daysToCoverQuantity","displayName":"Days to Cover","include":true,"primary":false},{"id":"revisionFlag","displayName":"Revision Flag","include":true,"primary":false}],"offset":0,"orFilters":[],"quoteValues":false,"sortFields":["-settlementDate","+issueName"],"singleFile":false,"zipped":true}') %>%
req_perform(path = dest)
readr::read_csv(dest)
创建于 2023-05-07 与 reprex v2.0.2