如何计算r

如何计算r,r,transform,lag,R,Transform,Lag,我已经创建了df1 我已经创建了df2 我想创建df3 我有2000多年的历史。gvkey=公司id 我基本上想做的是: 1根据df1计算上一年的投资 2在df2中创建一个名为lag_investment的列 2在df2的当年行中插入步骤1中的值 补充问题: 如果我想执行以下操作,代码会是什么样子 我已经创建了df1 我想向df1添加一个变量 我想计算除2004年以外所有年份的滞后投资 非常感谢你 我想你可以在dplyr中使用lag 如果数据帧未订购,请使用arrange first按年份订购

我已经创建了df1

我已经创建了df2

我想创建df3

我有2000多年的历史。gvkey=公司id

我基本上想做的是:

1根据df1计算上一年的投资

2在df2中创建一个名为lag_investment的列

2在df2的当年行中插入步骤1中的值

补充问题:

如果我想执行以下操作,代码会是什么样子

我已经创建了df1

我想向df1添加一个变量

我想计算除2004年以外所有年份的滞后投资

非常感谢你

我想你可以在dplyr中使用lag

如果数据帧未订购,请使用arrange first按年份订购

df1 %>% arrange(year) %>% mutate(lag_investment = lag(capex)/lag(ppent))
或数据表中的移位

我想你可以在dplyr中使用lag

如果数据帧未订购,请使用arrange first按年份订购

df1 %>% arrange(year) %>% mutate(lag_investment = lag(capex)/lag(ppent))
或数据表中的移位

使用data.table,我们可以

library(data.table)
setDT(df1)[, lag_investment :=Reduce(`/`, shift(.SD)), .SDcols = c("capex", "ppent")]
df1
#   year gvkey        ROA   ppent  capex lag_investment
#1: 2004  1004 0.01320911 139.137 13.033             NA
#2: 2005  1004 0.03005708 213.380 16.296     0.09367027
#3: 2006  1004 0.05014214 260.167 29.891     0.07637079
#4: 2007  1004 0.06423255 310.393 30.334     0.11489159
#5: 2008  1004 0.06723031 245.586 27.535     0.09772772
#6: 2009  1004 0.03814769 334.430 28.855     0.11211958
或者在R底

或者它可以写成

df1$lag_investment <- with(df1, c(NA, capex[-nrow(df1)]/ppent[-nrow(df1)]))
数据 使用data.table,我们可以

library(data.table)
setDT(df1)[, lag_investment :=Reduce(`/`, shift(.SD)), .SDcols = c("capex", "ppent")]
df1
#   year gvkey        ROA   ppent  capex lag_investment
#1: 2004  1004 0.01320911 139.137 13.033             NA
#2: 2005  1004 0.03005708 213.380 16.296     0.09367027
#3: 2006  1004 0.05014214 260.167 29.891     0.07637079
#4: 2007  1004 0.06423255 310.393 30.334     0.11489159
#5: 2008  1004 0.06723031 245.586 27.535     0.09772772
#6: 2009  1004 0.03814769 334.430 28.855     0.11211958
或者在R底

或者它可以写成

df1$lag_investment <- with(df1, c(NA, capex[-nrow(df1)]/ppent[-nrow(df1)]))
数据
df1 %>% arrange(year) %>% mutate(lag_investment = lag(capex)/lag(ppent))
library(data.table)
setDT(df1)[, lag_investment := shift(capex)/shift(ppent)]
library(data.table)
setDT(df1)[, lag_investment :=Reduce(`/`, shift(.SD)), .SDcols = c("capex", "ppent")]
df1
#   year gvkey        ROA   ppent  capex lag_investment
#1: 2004  1004 0.01320911 139.137 13.033             NA
#2: 2005  1004 0.03005708 213.380 16.296     0.09367027
#3: 2006  1004 0.05014214 260.167 29.891     0.07637079
#4: 2007  1004 0.06423255 310.393 30.334     0.11489159
#5: 2008  1004 0.06723031 245.586 27.535     0.09772772
#6: 2009  1004 0.03814769 334.430 28.855     0.11211958
df1$lag_investment <- with(df1, c(NA, head(capex, -1)/head(ppent, -1)))
df1$lag_investment <- with(df1, c(NA, capex[-nrow(df1)]/ppent[-nrow(df1)]))
df1 <-  structure(list(year = 2004:2009, gvkey = c(1004L, 1004L, 1004L, 
1004L, 1004L, 1004L), ROA = c(0.01320911, 0.03005708, 0.05014214, 
0.06423255, 0.06723031, 0.03814769), ppent = c(139.137, 213.38, 
260.167, 310.393, 245.586, 334.43), capex = c(13.033, 16.296, 
29.891, 30.334, 27.535, 28.855)), class = "data.frame", 
row.names = c("1", 
"2", "3", "4", "5", "6"))