我试图通过将每个值除以其列或行名称的最大值中的较小值来转换矩阵中的值.我遇到了麻烦,因为我不知道如何从较大的函数内查询特定值的行/列.
一小部分数据如下所示:加权(对称)邻接矩阵,mat:
Acousmatic Acoustic Afro-beat Alternative Ambient
Acousmatic 125 11 3 3 1
Acoustic 11 112398 1810 24216 3824
Afro-beat 3 1810 10386 1220 298
Alternative 3 24216 1220 103286 2838
Ambient 1 3824 298 2838 20400
Run Code Online (Sandbox Code Playgroud)
作为一个例子,我想通过找到由其对角线给出的"声学"的最大值(112398)和由其对角线给出的"替代"的最大值来转换"替代声学"(24216)的值(103286) ,并将"Alternative-Acoustic"(24216)除以这两个数字中的较小者.所以在这种情况下,较小的将是"替代",所以我想用24216/103286 =〜.2345转换"Alternative-Acoustic"值.
我想自动对此矩阵中的所有值执行此变换,这将导致矩阵的值范围为0-1,对角线为全1.
我在许多不同的迭代中尝试了以下内容,其中"mat"作为矩阵和数据框,但我不知道如何正确查询矩阵中每个值的行和列最大值.这是使用不存在的函数('colmax'和'rowmax'),但我认为它最清楚地表达了我想要做的事情:
transformedmat < - apply(mat,1:2,function(x)x/min(colmax(x),rowmax(x)))
我也尝试编写一个嵌入式函数,但结果很差,我想知道是否有一个更简单的解决方案:
rescalemat <- function(mat){
apply(mat, 1, function(x){
colmax<-apply(mat, 2, function(x) max(x))
rowmax<-apply(mat, 1, function(x) max(x))
x/min(colmax,rowmax)
mat
})
}
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激.
谢谢.
我有以下数据框,称之为df,这是一个由三个向量组成的数据框:"Name","Age"和"ZipCode".
df=
Name Age ZipCode
1 Joe 16 60559
2 Jim 20 60637
3 Bob 64 94127
4 Joe 23 94122
5 Bob 45 25462
Run Code Online (Sandbox Code Playgroud)
我希望删除整个行,df如果Name它在整个数据框中出现少于2次(并且灵活地为3倍,4倍或x倍).基本上保持Bob与Joe在数据帧,但删除Jim.我怎样才能做到这一点?
我试着把它变成一张桌子:
> table(df$Name)
Bob Jim Joe
2 1 2
Run Code Online (Sandbox Code Playgroud)
但我不知道从那里去哪里.
在将图形对象视为边缘列表时,有没有办法显示边缘权重?
我想本着以下精神做点什么:
get.edgelist(graph, attr='weight')
Run Code Online (Sandbox Code Playgroud)
以便查看边缘配对与节点旁边列出的权重,但似乎不允许.我知道如何查看权重的唯一方法是将网络数据视为邻接矩阵.希望这不是唯一的方法.