R read.csv错误地导入列名称
我有一个csv,我想作为data.frame导入到R中。这csv有我不能改变的标题,如USD.ZeroCouponBondPrice(1m)
和USD-EQ-SP500
。当我尝试将其导入到R,然而,R的read.csv
函数覆盖字符()-
为.
虽然我没能找到一种方法在功能documentation来解决这个问题,这行代码的工作:R read.csv错误地导入列名称
colnames(df)<-c('USD.ZeroCouponBondPrice(1m)', 'USD-EQ-SP500')
这些字符在data.frame
列名中是合法的。覆盖所有的列名是烦人的和脆弱的,因为它们有超过20个,并且它们改变是不可想象的。有没有办法阻止read.csv
替换这些字符,或者使用替代函数?
如果设置参数
check.names = FALSE
在read.csv
,则R将不会覆盖名称。但是这些名称在R中无效,它们必须与有效名称不同处理。
“处理不同”的一个例子是,如果您使用'$'表示法引用变量,则需要在变量名称周围加上反引号。 'DF $ \'USD.ZeroCouponBondPrice(1M)\''。 –
举例说明如何使用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
因为它们的行为与常规数据帧略有不同的可能Tibbles
解决方案利用Kelli-Jean's answer。
万一有人需要使用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))
由于'read.csv(dta,check.names = FALSE)'显示的结果,您可以在本机数据框中为变量使用无效名称。我用tibbles看到的唯一区别是它不会在使用'tibble()'函数创建一个名称时自动转换名称。至于OP的问题,至少在read.csv()'周围我没有看到''as_tibble()''的附加好处。 –
@BrianStamper我很感谢您的反馈。 –
我接受@ Kelli-Jean的答案,因为它更容易实现为解决方案,但我发现这个答案作为一个合理的选择是有帮助的。我没有详细说明我想要一个只使用R的基本包的答案,所以我不认为这个答案值得反对(不确定它是否是你)。 – Theaetetos
我不知道你能怎么样,但有可能使使用'Tibbles'一些黑客。通过'Tibbles',你可以使用_crazy name_(https://cran.r-project.org/web/packages/tibble/vignettes/tibble.html)获取变量名称。 –