如何在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)
这样的事情。
最简单,最优雅的方式是什么?
答案 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)以及相关联的变量(如$符号后面所示),那么您应该能够在整个数据框内进行各种计算。