R read.csv 导入列名不正确

R read.csv Importing Column Names Incorrectly

我有一个 csv,我想将其作为 data.frame 导入到 R 中。此 csv 有 headers,例如 USD.ZeroCouponBondPrice(1m)USD-EQ-SP500,我无法更改。但是,当我尝试将其导入 R 时,R 的 read.csv 函数会将字符 ()- 覆盖为 . 尽管我无法在函数 documentation,这行代码有效:

colnames(df)<-c('USD.ZeroCouponBondPrice(1m)', 'USD-EQ-SP500')

所以这些字符在 data.frame 列名中是合法的。覆盖所有的列名很烦人而且很脆弱,因为它们有 20 多个,而且更改它们并非不可想象。有没有办法防止 read.csv 替换这些字符,或者使用替代函数?

如果设置参数

check.names = FALSE

in read.csv,那么 R 将不会覆盖名称。但这些名称在 R 中无效,它们的处理方式必须与有效名称不同。

说明可能的 Tibbles 解决方案,利用 如何使用 check.names = FALSE

# install.packages(c("tidyverse"), dependencies = TRUE)
library(tibble)
dta <- url("http://s3.amazonaws.com/csvpastebin/uploads/a4c665743904ea8f18dd1f31edcbae04/crazy_names.csv")
TBdta <- as_tibble(read.csv(dta, check.names = FALSE)) 
TBdta
#> # A tibble: 6 x 3
#>   USD.ZeroCouponBondPrice(1m) USD-EQ-SP500 crazy name
#>                        <fctr>        <dbl>      <int>
#> 1                           A         10.0         12
#> 2                           A         11.0         14
#> 3                           B          5.0          8
#> 4                           B          6.0         10
#> 5                           A         10.5         13
#> 6                           B          7.0         11

请务必阅读 this introduction to Tibbles,因为它们的行为确实与常规数据帧有些不同。

万一有人需要用https

temporaryFile <- tempfile()
download.file("https://s3.amazonaws.com/csvpastebin/uploads/a4c665743904ea8f18dd1f31edcbae04/crazy_names.csv", destfile = temporaryFile, method="curl")
TBdta2 <- as_tibble(read.csv(temporaryFile, check.names = F))