数据帧内部和之间的数据帧操作

时间:2019-02-17 13:09:31

标签: r database dplyr

如何在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)我想创建前一天的数据框。     例如,我想要的最终结果将表示为lag(stocks,1)     实现这一目标的最简单,最优雅的方法是什么?     有没有使用dplyr的简单方法?

Q2)如何对这个数据框应用任何基本的算术运算?     例如,我想使用创建数据框

  • stocks1 = stocks + 1

  • stocks2 =股票x 3

  • stocks3 = stocks2 / stocks1(两个数据框之间的操作)

  • stocks4 = stocks3 / lag(stocks1)

这样的事情。

最简单,最优雅的方式是什么?

1 个答案:

答案 0 :(得分:1)

要解决第一个问题,这可能会对您有所帮助。在这种情况下,您不一定需要使用 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

此处显示了1月2日至1月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

关于计算,这取决于您要执行的操作。

例如您要在Z的每一行中添加 1 吗?

> 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)以及相关联的变量(如$符号后面所示),那么您应该能够在整个数据框内进行各种计算。