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