我想在列上执行类似Excel的操作。之前已经问过这个问题,例如:Excel like column operations in R dataframe
但是我找不到所有有用的答案,因为我不想为每个1700+行指定操作。所以我的问题是:
我有两列Data
和Close
。我想要另一个列log(x_{n+1}/x_n)
n=1,...,1719
,x_i
Close
(第2列)。链接中的答案建议根据行号指定操作,但我不能花时间为1720行做这些操作。
以下是该问题的其他一些答案,我不明白:http://r.789695.n4.nabble.com/Log-difference-in-a-dataframe-column-td3221225.html
使用as.ts
不起作用,结果只有0.我需要像
> df$LReturn <- log(df$Close / df$Close)
指定此新列中的第一个条目为1,其他所有条目均为(n+1):th
上的n:th
。
答案 0 :(得分:2)
试试这个:
library(Hmisc)
set.seed(3)
df = data.frame(date=1:10, close=25+rnorm(10))
df$Lreturn = log(df$close/Lag(df$close,1))
# date close Lreturn
#1 1 24.03807 NA
#2 2 24.70747 0.027467119
#3 3 25.25879 0.022068343
#4 4 23.84787 -0.057479317
#5 5 25.19578 0.054981806
#6 6 25.03012 -0.006596575
#7 7 25.08542 0.002206653
#8 8 26.11661 0.040284808
#9 9 23.78114 -0.093678580
#10 10 26.26737 0.099434498
您也可以执行此基础R
:
df$LreturnBaseR = log(c(df$close[-1],NA)/df$close)
答案 1 :(得分:1)
应用日志属性和base
diff
函数:
df$LrReturn<-c(diff(log(df$close)),NA)