我想知道是否有人知道我有任何計算這個問題的函式/策略:
所以如果我有變數x
x <- c(1,2,3,4,5,6,7,8,9)
dataframe <- data.frame(x)
dataframe$y <- 0
我想計算每個值與其余值之間的差異之和。那么這個變數中的每個值都會有一個差值的分數。類似于: y[1]<-sum((x[1]-2) (x[1]-3) (x[1]-4)....(x[1]- 9))
與此類似的東西(因為實際上我有一個大資料框,有很多條件我想運行這個計算)
difference_sum <- 0
for (i in x) {
value_of_interest <- x[i]
difference_sum <- difference_sum (x[i] - x[i 1])
difference_sum <- difference_sum (x[i] - x[i 2])
}
#all the way through the end of the list
謝謝!
uj5u.com熱心網友回復:
不確定這些是否是您正在尋找的值,但也許
o <- outer(dataframe$x, dataframe$x, `-`)
o[lower.tri(o)] <- NA
dataframe$y <- rowSums(o, na.rm = TRUE)
dataframe
# x y
# 1 1 -36
# 2 2 -28
# 3 3 -21
# 4 4 -15
# 5 5 -10
# 6 6 -6
# 7 7 -3
# 8 8 -1
# 9 9 0
uj5u.com熱心網友回復:
您可以使用imap()來自purrr.
library(dplyr)
library(purrr)
df %>%
mutate(y = imap_dbl(x, ~ sum(.x - x[-(1:.y)])))
# x y
# 1 1 -36
# 2 2 -28
# 3 3 -21
# 4 4 -15
# 5 5 -10
# 6 6 -6
# 7 7 -3
# 8 8 -1
# 9 9 0
x如果是命名向量或資料被分組,上述方法可能會中斷。一種更安全的方法是將索引傳遞1:n()到map2():
df %>%
mutate(y = map2_dbl(x, 1:n(), ~ sum(.x - x[-(1:.y)])))
uj5u.com熱心網友回復:
使用data.table:
setDT(dataframe)[, y:=rev(cumsum(rev(x)))]
dataframe[, y:=(.N:1)*x - y]
dataframe
## x y
## 1: 1 -36
## 2: 2 -28
## 3: 3 -21
## 4: 4 -15
## 5: 5 -10
## 6: 6 -6
## 7: 7 -3
## 8: 8 -1
## 9: 9 0
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/468527.html
