我需要計算許多變數的所有成對差異(我的資料集中有 100 個)。如果 abs 差異 >1 那么它應該出現 1,否則結果應該是 0。然后我想總結每個成對比較的 1 和 0 值并將它們排列成一個矩陣。我嘗試了以下代碼,但有一條錯誤訊息。
juan<-outer(seq_along(rio_csv), seq_along(rio_csv), FUN =
Vectorize(function(i, j)(sum(ifelse(abs(rio_csv[[i]]-rio_csv[[j]]))>1,1,0))))
不過,該操作適用于兩列。
> (pri<-sum(ifelse(abs(rio_csv$V1-rio_csv$V2)>1,1,0)))
資料

感謝您的幫助。
uj5u.com熱心網友回復:
這樣的事情怎么樣:
a = 3*runif(100) # I'm just randomizing values, your dataset should come here
b = expand.grid(a,a) #also 'merge' would work
b$digital = 0
b$digital[abs(b[,1]-b[,2])>1] = 1
result = b$digital
我不知道你把值放入矩陣是什么意思,但 0/1 值在結果變數中(仍然是向量形式)。這絕不是最簡單和最流暢的解決方案,只是一個快速的解決方案:) 另外我沒有使用 ifelse 函式,但是 abs(b[,1]-b[,2])>1 是一個布爾向量,并且最終結果與 ifelse 函式相同..
uj5u.com熱心網友回復:
使用mtcars示例資料,我會這樣做:
data = mtcars
col_pairs = combn(names(data), 2, simplify = TRUE)
counts = apply(col_pairs, MARGIN = 2, function(x) sum(abs(data[[x[1]]] - data[[x[2]]]) > 1))
result = matrix(
NA,
nrow = ncol(data), ncol = ncol(data),
dimnames = list(names(data), names(data))
)
result[t(col_pairs)] = counts
result
# mpg cyl disp hp drat wt qsec vs am gear carb
# mpg NA 32 32 32 32 32 27 32 32 32 32
# cyl NA NA 32 32 21 30 32 32 32 20 30
# disp NA NA NA 32 32 32 32 32 32 32 32
# hp NA NA NA NA 32 32 32 32 32 32 32
# drat NA NA NA NA NA 16 32 32 32 3 19
# wt NA NA NA NA NA NA 32 28 28 17 19
# qsec NA NA NA NA NA NA NA 32 32 32 32
# vs NA NA NA NA NA NA NA NA 0 32 20
# am NA NA NA NA NA NA NA NA NA 32 21
# gear NA NA NA NA NA NA NA NA NA NA 14
# carb NA NA NA NA NA NA NA NA NA NA NA
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/347697.html
上一篇:為什么在單行中使用條件時不能在pythonifelse陳述句中使用pass
下一篇:“谷歌地圖”導航應用
