我想循环遍历一个数据帧的列,并将计算结果存入矩阵。循环遍历数据帧的连续列
该场景可以与下面的示例数据被复制:
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