Работа с фреймами данных внутри и между фреймами данных - PullRequest
0 голосов
/ 17 февраля 2019

Как я могу выполнить какую-либо операцию внутри и между фреймами данных в R?

Например, вот фрейм данных о возвратах акций.

stocks <- data.frame(
  time=as.Date('2009-01-01') + 0:9,
  X=rnorm(10, 0, 1),
  Y=rnorm(10, 0, 2),
  Z=rnorm(10, 0, 4)
)
         Date           X          Y           Z
1  2009-01-01 -0.31758501 -1.2718424  -2.9979292
2  2009-01-02 -1.06440187  0.4202969  -5.7925412
3  2009-01-03  0.26475736 -2.3955779  -2.2638179
4  2009-01-04 -0.83653746  0.4161053 -10.1011995
5  2009-01-05 -0.12214392  0.7143456   3.6851497
6  2009-01-06 -0.01186287 -2.1322029  -0.1577852
7  2009-01-07  0.27729415  0.1323237  -4.4237673
8  2009-01-08 -1.74389562  0.4962045   0.4192498
9  2009-01-09  0.83150240 -0.9241747  -1.6752324
10 2009-01-10 -0.52863956  0.1044531  -1.2083588

Q1) Я хотел бы создатьдатафрейм с предыдущего дня.Например, конечный результат, который я хочу получить, будет выражаться как отставание (акции, 1). Какой самый простой и элегантный способ добиться этого?Есть ли какой-нибудь простой способ использовать dplyr?

Q2) Как я могу применить любую базовую арифметическую операцию к этому фрейму данных?Например, я хотел бы создать фреймы данных с

  • stocks1 = акции + 1

  • stocks2 = акции x 3

  • акции3 = акции2 / акции1 (операция между двумя кадрами данных)

  • акции4 = акции3 / отставание (акции1)

Примерно так.

Какой самый простой и элегантный способ?

1 Ответ

0 голосов
/ 18 февраля 2019

Чтобы решить первую проблему, это может вам помочь.Вам не обязательно использовать dplyr в этом случае, использование функции head () должно быть достаточным, если все, что вы хотите сделать, это отстать от переменных.

stocks <- data.frame(
  time=as.Date('2009-01-01') + 0:9,
  X=rnorm(10, 0, 1),
  Y=rnorm(10, 0, 2),
  Z=rnorm(10, 0, 4)
)

previous<-head(stocks,9)
df<-data.frame(stocks$time[2:10],stocks$X[2:10],stocks$Y[2:10],stocks$Z[2:10],previous$X,previous$Y,previous$Z)
col_headings<-c("time","X","Y","Z","previousX","previousY","previousZ")
names(df)<-col_headings

Здесь отображаются даты со 2 января по 10 января, причем во фрейм данных также включаются задержки для X, Y и Z.

> df
        time          X          Y           Z  previousX  previousY
1 2009-01-02  0.7878110 -2.1394047  0.68775794 -0.0759606  1.2863089
2 2009-01-03 -0.2767296 -2.3453356 -1.56313888  0.7878110 -2.1394047
3 2009-01-04 -0.2122021  0.1589629 -1.13926020 -0.2767296 -2.3453356
4 2009-01-05  0.1195826  3.2320352 -0.32020803 -0.2122021  0.1589629
5 2009-01-06  0.7642622 -0.7621168  1.66614679  0.1195826  3.2320352
6 2009-01-07 -0.3073972 -2.9475654  5.63945611  0.7642622 -0.7621168
7 2009-01-08  0.3597369  0.5011861  5.95424269 -0.3073972 -2.9475654
8 2009-01-09 -1.8701881  0.4417496  1.34273218  0.3597369  0.5011861
9 2009-01-10 -1.1172033 -0.5566736  0.05432339 -1.8701881  0.4417496
   previousZ
1  3.2188050
2  0.6877579
3 -1.5631389
4 -1.1392602
5 -0.3202080
6  1.6661468
7  5.6394561
8  5.9542427
9  1.3427322

Что касается расчетов, то это зависито том, что вы пытаетесь сделать.

например, хотите ли вы добавить 1 к каждой строке в Z?

> df$Z+1
[1]  1.6877579 -0.5631389 -0.1392602  0.6797920  2.6661468  6.6394561
[7]  6.9542427  2.3427322  1.0543234

Вы можете разделить две доходности акций на каждуюдругой, как вы указали.Обратите внимание, что мы объединили их в один фрейм данных, поэтому мы не обязательно проводим «операцию между двумя фреймами данных» как таковую.

> df$Y/df$Z
[1]  -3.11069421   1.50040132  -0.13953168 -10.09354826  -0.45741275
[6]  -0.52266839   0.08417294   0.32899307 -10.24740160

Указав фрейм данных (в данном случае df) вместе ссоответствующая переменная (как указано после символа $), тогда вы сможете выполнять широкий спектр вычислений на всем фрейме данных.

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