Как применить na.locf к нескольким столбцам в разных data.frames, все заканчивающиеся на «price» - PullRequest
0 голосов
/ 21 октября 2018

У меня есть список, содержащий несколько фреймов данных, каждый фрейм данных из 2 столбцов «дата» и «XXX_price» - например, Boeing_price, GM_price ...

Их нет на одном листе.У каждой компании есть свой лист.

Теперь я хотел бы применить na.locf для столбца "цена" всех компаний.Что-то вроде:

Q <- list(Boeing, GM; ...) 

Select from every company the column ending with "_price" and apply n.locf.
Afterwards I would like to add another column diff(log(XXX_price)).
Finally I would like to add all return columns in on sheet. 

Итак, подведем итог.Мне бы хотелось узнать, как применять функции к спискам, как называть новые столбцы и как их извлекать.Это должно быть что-то с gsub.

Но я понятия не имею, как это сделать.

Date   Boeing_price
12.11.2010  53.478
15.11.2010  53.918
16.11.2010  53.215
17.11.2010  52.978
18.11.2010  54.766
19.11.2010  53.901
22.11.2010  54.274
23.11.2010  53.91
24.11.2010  55.444
26.11.2010  54.927
29.11.2010  54.554
30.11.2010  54.054


Date    GM_Price
12.11.2010  #NA
15.11.2010  #NA
16.11.2010  #NA
17.11.2010  28.5455
18.11.2010  29.5749
19.11.2010  29.6355
22.11.2010  #NA
23.11.2010  28.7618
24.11.2010  28.9607
26.11.2010  29.2376
29.11.2010  #NA
30.11.2010  29.5836

Кто-нибудь знает, как это сделать?

1 Ответ

0 голосов
/ 21 октября 2018

Используя данные в примечании в конце, попробуйте следующее:

library(zoo)

f <- function(data) {
  data[[2]] <- na.locf0(data[[2]])
  data
}

L2 <- lapply(L, f)

Другая возможность - объединить кадры данных в один кадр данных и преобразовать их в объект zoo или xts и использовать это:

library(zoo)
z <- na.locf(read.zoo(do.call("merge", L)), na.rm = FALSE)

Чтобы получить объект xts:

library(xts)
X <- as.xts(z)

Примечание

Мы предполагаем, что входные данные такие, как показано здесь в воспроизводимой форме:

Lines1 <- "Date   Boeing_price
12.11.2010  53.478
15.11.2010  53.918
16.11.2010  53.215
17.11.2010  52.978
18.11.2010  54.766
19.11.2010  53.901
22.11.2010  54.274
23.11.2010  53.91
24.11.2010  55.444
26.11.2010  54.927
29.11.2010  54.554
30.11.2010  54.054"
DF1 <- read.table(text = Lines1, header = TRUE, na.strings = "#NA")
DF1$Date <- as.Date(DF1$Date, "%d.%m.%Y")

Lines2 <- "Date    GM_Price
12.11.2010  #NA
15.11.2010  #NA
16.11.2010  #NA
17.11.2010  28.5455
18.11.2010  29.5749
19.11.2010  29.6355
22.11.2010  #NA
23.11.2010  28.7618
24.11.2010  28.9607
26.11.2010  29.2376
29.11.2010  #NA
30.11.2010  29.5836"
DF2 <- read.table(text = Lines2, header = TRUE, na.strings = "#NA",
 comment.char = "")
DF2$Date <- as.Date(DF2$Date, "%d.%m.%Y")

L <- list(DF1, DF2)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...