使用 getSymbols("JOSJFSODFJSODfJ", src = "FRED") 时更改列的名称

Changing the name of a column when using getSymbols("JOSJFSODFJSODfJ", src = "FRED")

这可能很愚蠢,但我还没有找到解决方案。

当下载 FRED 数据时,它有可怕的名字,例如

FranceExports <<- getSymbols("FRAXTEXVA01CXMLM", src = "FRED", auto.assign = FALSE)

我想把很多数据放在一个data.table

eu <- data.table( FranceExports , GermanyExports, ... ) 

但是 table returns

 head(FranceExports)
           FRAXTEXVA01CXMLM
1960-01-01        595665297
1960-02-01        610479446
1960-03-01        612014108
1960-04-01        559989074
1960-05-01        579246653
1960-06-01        557069763
> eu <- data.table(FranceExports)
> head(eu)
   FRAXTEXVA01CXMLM
1:        595665297
2:        610479446
3:        612014108
4:        559989074
5:        579246653
6:        557069763

显然我希望能够访问 eu$FranceExports,而不是 eu$FRAXTEXVA01CXMLM

> eu$FranceExports
NULL

我对 R 还是个新手,所以我发现 FranceExports 只是对原始数据结构的引用。好吧,我明白了。那个 env = userdata 寻找一个框架或 table 来放入数据,但它仍然没有简单地更改名称以便我可以直接引用它。

那么,我怎样才能轻松做到这一点(很简单,因为有很多欧盟国家拥有大量数据^^)

===== 与 Louis 下面的 Apropos Convo ==== 现在每个系列看起来像这样

if (!exists("NetherlandsExports")) NetherlandsExports <<- getSymbols("NLDXTEXVA01CXMLM", src = "FRED", auto.assign = FALSE)
colnames(eu)[colnames(eu) == "NLDXTEXVA01CXMLM"] <- "NetherlandsExports"



if (!exists("GermanyExports")) SpainExports <<- getSymbols("ESPXTEXVA01CXMLM", src = "FRED", auto.assign = FALSE)
colnames(eu)[colnames(eu) == "GRCXTEXVA01CXMLM"] <- "GreeceExports"

更改列名称

您可以通过更改列名来解决此问题。这应该可以解决问题:

eu <- data.table(FranceExports)
colnames(eu)[colnames(eu) == "FRAXTEXVA01CXMLM"] <- "FranceExports"
eu$FranceExports #This will work now

如果您需要分配多个名称,您可以使用这样的代码:

#Assuming a data.frame with 4 columns
colnames(df) <- c("col1", "col2", "col3", "col4")

希望对您有所帮助。

可能是这样的(注意我还没有测试过):

cfg <- c(France="FRAXTEXVA01CXMLM", Netherlands="NLDXTEXVA01CXMLM", Germany="ESPXTEXVA01CXMLM")

Reduce(function(x, y) merge(x, y, by="Date", all=TRUE),
    lapply(names(cfg), function(x) {
        DF <- quantmod::getSymbols(cfg[x], src="FRED") #setNames(data.frame(x=1:5, row.names=Sys.Date()+1:5), cfg[x])
        DT <- setDT(DF, keep.rownames=TRUE)
        setnames(DT, old=names(DT), new=c("Date", x))
    })
)

仅供参考,在 github/rdatatable 中的 dev 下有一个 mergelist 函数来对 data.tables.

列表进行这种递归合并