我有一些R代码创建一个XTS对象,然后在该对象的生命周期中执行各种cbind操作。我的一些列的名称如“adx-1”。这是好的,直到执行另一个cbind()操作。此时,任何带有“ - ”字符的列都会更改为“。”。所以“adx-1”变成“adx.1”。
重现:
x = xts(order.by=as.Date(c("2014-01-01","2014-01-02")))
x = cbind(x,c(1,2))
x
..2
2014-01-01 1
2014-01-02 2
colnames(x) = c("adx-1")
x
adx-1
2014-01-01 1
2014-01-02 2
x = cbind(x,c(1,2))
x
adx.1 ..2
2014-01-01 1 1
2014-01-02 2 2
它不只是用数字做这个。它也将“test-text”更改为“test.text”。多个破折号也会改变。 “test-text-two”更改为“test.text.two”。
有人可以解释为什么会发生这种情况,如果可能的话,如何阻止它发生?
我当然可以更改我的命名方案,但如果我没有这样做,那将是首选。
谢谢!
答案 0 :(得分:2)
merge.xts
将列名转换为语法名称,但不能包含-
。根据{{1}}:
?Quotes
目前无法改变此行为。
答案 1 :(得分:0)
该行为的原因正是约书亚·乌尔里希(Joshua Ulrich)强调的。这在R
中的许多数据类型中很常见:您需要“有效”名称。 Here is a great discussion of this "issue".
对于数据帧,您可以通过选项check.names = FALSE
作为解决方法,但是xts
对象未实现。也就是说,还有许多其他解决方法可供您使用。
例如,您可以仅在cbind
之后重命名感兴趣的列。使用您的代码,只需添加:
colnames(x)[1] <- c("adx-1")
强制返回所需的列名称。
另外,如果您想要一些可能更系统的内容,可以考虑使用this gsub
solution。