2014-02-20 4 views
0

Я пытаюсь найти возврат журнала вдоль вектора цен, но не уверен, как вызвать индекс внутри функции для использования в функции apply.lapply для функции, которая требует индексации

Вот что я использую сейчас:

set.seed(456) 
df1 <- data.frame(id = 1:20, col1 = round(runif(20) * 100 ,0)) 
df1[,'logDiff'] <- NA 

for(i in 2:20){ 
df1[i,'logDiff'] <- log(df1[i,'col1']/df1[i-1,'col1']) 
} 

Есть предложения?

EDIT:

У меня есть куча колонок, чтобы сделать это для, и хотел бы использовать что-то вроде этого:

colsToUse <- c('co1l','col2','col3') 
lagLogDf <- as.data.frame(lapply(df1[,colsToUse], lagLogFunction(x))) 

ответ

2

Как вы хотите, чтобы разница между последовательными значениями вектора, вы можете использовать diff функции:

df1$logDiff = c(NA, diff(log(df1$col))) 

в качестве альтернативы (например, если ваша операция была более сложной, чем кумулятивное различие), вы можете использовать head и tail, чтобы получить вектор отсутствующих первый элемент и отсутствующий последний элемент, и работать с ними в векторизованном образе:

df1$logDiff = c(NA, log(tail(df1$col1, -1)/head(df1$col1, -1))) 
+0

+1, избитый 43sec :-) – Beasterfield

Смежные вопросы