#r #for-loop #vectorization
#r #для цикла #векторизация
Вопрос:
Leaves<- c(2,4,6,7,8,10,11,15)
ax<- c(2,1,1,2,3,1,1,1)
bx <- c(0,0,0,0,2,0,0,1)
mydata<- data.frame(Leaves, ax, bx)
Sx<- c()
Sx[1] <- sum(x$ax)
for(i in 2:length(mydata$Leaves)){
Sx[i] <- Sx[i-1] - mydata$ax[i-1]
}
Здесь происходит то, что я хочу, чтобы первое значение для столбца Sx было суммой столбца ax. Второе значение Sx должно быть Sx [1]-ax [1], третье значение Sx должно быть Sx [2]-ax[2 и так далее.
Этот код работает прямо сейчас, но это цикл for. Кто-нибудь знает способ создать векторизованную альтернативу этому циклу for? Я много изучал функции Dplyr lag и data.table shift, но я не уверен, как заставить их работать.
Ответ №1:
Векторным способом было бы :
mydata$Sx <- sum(mydata$ax) - cumsum(mydata$ax) mydata$ax
mydata
# Leaves ax bx Sx
#1 2 2 0 12
#2 4 1 0 10
#3 6 1 0 9
#4 7 2 0 8
#5 8 3 2 6
#6 10 1 0 3
#7 11 1 0 2
#8 15 1 1 1
Комментарии:
1. Вы сделали это простым, спасибо вам большое!