使用 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.
列表进行这种递归合并
这可能很愚蠢,但我还没有找到解决方案。
当下载 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.