用 R 中的组数据之间的平均差异填充矩阵
Populate matrix with average difference between group data in R
我希望获得数据框各列之间差异的平均绝对值(即 1. 从一列中减去另一列中的值,2. 取这些差异的绝对值,然后 3. 取这些绝对值的平均值)。然后我希望用将每一列与其他每一列进行比较的结果填充一个矩阵。
例如:我有一个看起来像这样的数据框
df <- data.frame(m1=1:3, m2=1:3+1, m3=1:3+2)
我希望获得这样的矩阵(例如,第 2 列第 1 行填充了以下结果:
mean(abs(m2-m1))
看起来像这样:
m1 m2 m3
m1 0 1 2
m2 1 0 1
m3 2 1 0
试试 diag
abs(df-diag(as.matrix(df)))
# m1 m2 m3
# 1 0 1 2
# 2 1 0 1
# 3 2 1 0
使用基数 r:
由于我们取的是绝对值,那么结果将始终是一个对称矩阵:
首先 (1) 获取列的绝对差的平均值,(2) 获取组合,(3) 创建维度矩阵:ncol(df)*ncol(df) 和 (4) 填充在结果中:
a=combn(df,2,function(x)mean(abs(do.call("-",x))))#1
b= t(combn(ncol(df),2)) #(2)
d = matrix(0,ncol(df),ncol(df))#(3)
d[b]=a
d+t(d)
[,1] [,2] [,3]
[1,] 0 1 2
[2,] 1 0 1
[3,] 2 1 0
你可以写一个很长的一行代码:
replace(matrix(0,ncol(df),ncol(df)),rbind(i<-t(combn(ncol(df),2)),i[,2:1]),rep(combn(df,2,function(x)mean(abs(do.call("-",x)))),2))
[,1] [,2] [,3]
[1,] 0 1 2
[2,] 1 0 1
[3,] 2 1 0
我希望获得数据框各列之间差异的平均绝对值(即 1. 从一列中减去另一列中的值,2. 取这些差异的绝对值,然后 3. 取这些绝对值的平均值)。然后我希望用将每一列与其他每一列进行比较的结果填充一个矩阵。
例如:我有一个看起来像这样的数据框
df <- data.frame(m1=1:3, m2=1:3+1, m3=1:3+2)
我希望获得这样的矩阵(例如,第 2 列第 1 行填充了以下结果:
mean(abs(m2-m1))
看起来像这样:
m1 m2 m3
m1 0 1 2
m2 1 0 1
m3 2 1 0
试试 diag
abs(df-diag(as.matrix(df)))
# m1 m2 m3
# 1 0 1 2
# 2 1 0 1
# 3 2 1 0
使用基数 r:
由于我们取的是绝对值,那么结果将始终是一个对称矩阵:
首先 (1) 获取列的绝对差的平均值,(2) 获取组合,(3) 创建维度矩阵:ncol(df)*ncol(df) 和 (4) 填充在结果中:
a=combn(df,2,function(x)mean(abs(do.call("-",x))))#1
b= t(combn(ncol(df),2)) #(2)
d = matrix(0,ncol(df),ncol(df))#(3)
d[b]=a
d+t(d)
[,1] [,2] [,3]
[1,] 0 1 2
[2,] 1 0 1
[3,] 2 1 0
你可以写一个很长的一行代码:
replace(matrix(0,ncol(df),ncol(df)),rbind(i<-t(combn(ncol(df),2)),i[,2:1]),rep(combn(df,2,function(x)mean(abs(do.call("-",x)))),2))
[,1] [,2] [,3]
[1,] 0 1 2
[2,] 1 0 1
[3,] 2 1 0