2015-08-22 3 views
1

Я пытаюсь улучшить следующий код для столбцов «n», и до сих пор у меня нет кубиков.Как я могу выполнить вычитание столбцов для столбцов «n» в R?

A = runif(1000, -2, 2) 
B = data.frame(A, runif(1000, -0.5, 0.5), runif(1000, -0.25, 0.25), runif(1000, -0.1, 0.1), ...) 
X[, 1] = B[, 1] - B[, 2]  # << I am stuck in this steps 
X[, 2] = X[, 1] - B[, 3]  # << I am stuck in this steps 
X[, 3] = X[, 2] - B[, 4]  # << I am stuck in this steps 
... 
... 
... 
X[, n] = X[, n-1] - B[, n+1] # << I am stuck in this steps 
W = data.frame(B[, 1], X[,1], ... , X[,n]) 
plot.ts(W, plot.type="multiple") 

Я уже пробовал использовать "цикл", однако R не понимает приращения "N-1" и "п + 1" индекса.

+1

Пожалуйста, [править], чтобы добавить код, который вы пытались здесь. Публикация [Минимальный, завершенный, проверенный пример] (http://stackoverflow.com/help/mcve), который демонстрирует вашу проблему, вероятно, поможет вам получить более качественные ответы. Благодаря! –

+0

Это не понадобится. Решение @ josilber работало как прелесть для меня. – Tom

ответ

3

Вы можете использовать Reduce с accumulate=TRUE, чтобы применить функцию к каждому столбцу кадра данных, чтобы скопировать результат. В этом случае вы хотите применить вычитание к каждой паре столбцов.

setNames(data.frame(Reduce("-", dat, accumulate=TRUE)), names(dat)) 
# x y z 
# 1 1 -1 -1 
# 2 2 -1 -6 
# 3 3 -1 -11 

данных:

(dat = data.frame(x=1:3, y=2:4, z=c(0, 5, 10))) 
# x y z 
# 1 1 2 0 
# 2 2 3 5 
# 3 3 4 10 
Смежные вопросы