我想循環遍歷一個數據幀的列,並將計算結果存入矩陣。循環遍歷數據幀的連續列
該場景可以與下面的示例數據被複制:
df = data.frame(replicate(10,sample(0:20,10,rep=TRUE))) # the columns to be calculated on
M1 = as.data.frame(matrix(0, nrow = 10, ncol = 10)) # a matrix to hold the results.
rownames(M1) = colnames(df)
colnames(M1) = colnames(df)
並且顯示如下:
> df # Frame with columns of data, X1 to X10
X1 X2 X3 X4 X5 X6 X7 X8 X9 X10
1 1 19 2 6 6 5 0 2 5 10
2 16 7 14 16 16 18 11 2 18 11
3 7 6 11 4 4 1 18 11 10 16
4 20 2 4 20 4 6 10 5 16 7
5 9 8 16 19 11 2 14 7 13 7
6 5 16 6 8 20 15 5 11 4 0
7 11 16 12 8 18 20 20 20 10 14
8 17 14 10 4 3 10 13 11 5 1
9 9 20 10 5 1 7 12 10 5 6
10 8 14 3 14 20 10 17 20 9 14
> M1 # Output frame to hold results
X1 X2 X3 X4 X5 X6 X7 X8 X9 X10
X1 0 0 0 0 0 0 0 0 0 0
X2 0 0 0 0 0 0 0 0 0 0
X3 0 0 0 0 0 0 0 0 0 0
X4 0 0 0 0 0 0 0 0 0 0
X5 0 0 0 0 0 0 0 0 0 0
X6 0 0 0 0 0 0 0 0 0 0
X7 0 0 0 0 0 0 0 0 0 0
X8 0 0 0 0 0 0 0 0 0 0
X9 0 0 0 0 0 0 0 0 0 0
X10 0 0 0 0 0 0 0 0 0 0
在df
列X1和X2是在投入到計算,然後X1和X3,然後X1和X4等,然後循環將循環X2和X3,然後循環X2和X4等。
列n和m被輸入到計算/循環中,並且結果應該被放置在對應於列的矩陣中的適當位置上,其中 x m。計算本身簡單地將Xn和Xm之間的區域確定爲繪製線。我不知道如何正確地構建循環來做到這一點:
# The first iteration of the calculation, column X1 and X2 (X1 and X1 would = 0)
y = seq(1,10,1)
f1 = approxfun(y, df[,1] - df[,2]) # takes two columns as inputs
f2 = function(x) abs(f1(x))
area1 = integrate(f2, 1, 10, subdivisions = 500)
M1[2,1] = area1$value
結果框架會產生一個「半矩陣」(即所有需要的鏡像一半是相同的):
> M1
X1 X2 X3 X4 X5 X6 X7 X8 X9 X10
X1 0 0 0 0 0 0 0 0 0 0
X2 A 0 0 0 0 0 0 0 0 0
X3 A A 0 0 0 0 0 0 0 0
X4 A A A 0 0 0 0 0 0 0
X5 A A A A 0 0 0 0 0 0
X6 A A A A A 0 0 0 0 0
X7 A A A A A A 0 0 0 0
X8 A A A A A A A 0 0 0
X9 A A A A A A A A 0 0
X10 A A A A A A A A A 0
我開始構建一個for循環,但我使用i和j保持在X1,直到它已通過X2-X10循環,然後移動到X2等
感謝絆倒了!
當我嘗試運行'F1 = approxfun(Y,DF [,1] - DF [,2])',我得到:'在xy.coords錯誤(x,y):找不到對象'y'。函數f1和f2是您試圖在數據上運行的實際函數嗎? – biomiha
你可以提供實際的計算輸出,可能只是一個4x4矩陣? – CCurtis
@biomiha道歉,我從我的解釋中遺漏了'y'的細節,並修改了計算方法。對於這個問題,這應該是原文的縮小版本。 – Qaribbean