Изменение имени столбца при использовании getSymbols ("JOSJFSODFJSODfJ", sr c = "FRED") - PullRequest
4 голосов
/ 16 апреля 2020

Возможно, это глупо, но я не смог найти решение.

При загрузке данных FRED у них ужасные имена, такие как

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

Я хочу поставить много данных в data.table

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

, но таблица возвращает

 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, а не к e F $ $ FRAXTEXVA01CXMLM

> eu$FranceExports
NULL

Я все еще новичок в R, поэтому я понял, что FranceExports - это просто ссылка на исходную структуру данных. Хорошо, я понял. И это env = userdata ищет кадр или таблицу для помещения данных, но все равно не просто меняет имя, чтобы я мог ссылаться на него напрямую.

Итак, как я могу это легко сделать ( легко, потому что есть много стран ЕС с большим количеством данных ^^)

===== По поводу 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"

Ответы [ 2 ]

1 голос
/ 17 апреля 2020

Может быть что-то вроде (предостережение, что я не проверял это):

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 есть функция mergelist для dev для такого рекурсивного слияния списка data.tables.

1 голос
/ 16 апреля 2020

Изменить имя столбца

Эту проблему можно решить, изменив имя столбца. Это должно сработать:

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")

Надеюсь, это поможет.

...