Ошибка «количество заменяемых элементов не кратно длине замены» в одном элементе xts - PullRequest
0 голосов
/ 02 июня 2018

Я знаю, что эта ошибка хорошо известна, и я прочитал много вопросов, но я все еще не могу понять, почему у меня есть эта проблема в моем случае.

У меня есть объект xts с 74 столбцамис ценами закрытия определенных акций (данные из файла CSV).Вот как выглядят данные:

head(clPrices_xts[1:5,1:10])
           ACINO.HLDG.N ACTELION.N ADDEX.N ALPIQ.HOLDING.N AMS ARBONIA.I ARBONIA.N ARPIDA.N ASCOM.N.10 ATTISHOLZ.N
1996-08-02           NA         NA      NA              NA  NA       700        NA       NA         NA         516
1996-08-05           NA         NA      NA              NA  NA       700        NA       NA         NA         530
1996-08-06           NA         NA      NA              NA  NA       700        NA       NA         NA         530
1996-08-07           NA         NA      NA              NA  NA        NA        NA       NA         NA         532
1996-08-08           NA         NA      NA              NA  NA       680        NA       NA         NA         540

str(clPrices_xts)
 An ‘xts’ object on 1996-08-02/2017-09-13 containing:
 Data: num [1:5900, 1:74] NA NA NA NA NA NA NA NA NA NA ...
 - attr(*, "dimnames")=List of 2
 ..$ : NULL
 ..$ : chr [1:74] "ACINO.HLDG.N" "ACTELION.N" "ADDEX.N" "ALPIQ.HOLDING.N" ...
 Indexed by objects of class: [Date] TZ: UTC
 xts Attributes:  
 NULL

Мне нужно манипулировать этим временным рядом (тс).Например, я хотел бы изменить значение для ACTELION.N в первый день ts:

clPrices_xts["1996-08-02"]$ACTELION.N
           ACTELION.N
1996-08-02         NA
clPrices_xts["1996-08-02"]$ACTELION.N <- 0
Warning message:
In NextMethod(.Generic) :
  number of items to replace is not a multiple of replacement length

У кого-нибудь есть идея, почему я получаю эту ошибку?Мне кажется, что есть только один элемент, который я хочу изменить ...

Примечание: не уверен, что это полезно, но я преобразую данные из длинных в широкие, используя функцию reshape2::dcast, изатем к xts:

as.xts(clPrices_wide[,-1] %>%
                     apply(2, function(x) ifelse(is.nan(x), NA, x))
                   , order.by = clPrices_wide$TRADE_DATE)

Ответы [ 2 ]

0 голосов
/ 02 июня 2018

Попробуйте это:

clPrices_xts["1996-08-02",] <- c(0)
0 голосов
/ 02 июня 2018

Вы получаете сообщение, потому что вы выбираете строку с несколькими позициями и длиной> 1, но записываете только одно значение.Чтобы выбрать только один, yo должен указать индексы для записи строк и столбцов, например: clPrices_xts["1996-08-02", "ACTELION.N"] <- 0

Я надеюсь, что это проблема.Ура!,

РЕДАКТИРОВАТЬ: я нашел другое решение, добавив запятую в скобках:

clPrices_xts["1996-08-02",]$ACTELION.N <- 0

также работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...