全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
822 5
2020-05-21
各位好,我有一个N*N的矩阵,我想保持矩阵中间的数值不变,随机打乱N个个体的顺序,如下图所示。请问如何通过R软件实现,感激不尽!

微信图片_20200521223024.jpg
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2020-5-22 09:56:29
原矩阵A,shuffle后矩阵B:
B=A #复制矩阵
colnames(B)<-sample(colnames(A),dim(A)[2]) #随机取A矩阵列名作为B矩阵列名
rownames(B)<-sample(rownames(B),dim(A)[1]) #B矩阵行名
#以上是行名列名顺序不同的方法
#如需要行名列名顺序相同,只需将sample的序列赋值给中间向量,再用中间向量作为行名和列名即可
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2020-5-22 15:30:25
llb_321 发表于 2020-5-22 09:56
原矩阵A,shuffle后矩阵B:
B=A #复制矩阵
colnames(B)
非常感谢您的回复!我在执行上述命令时报错了,Error in sample.int(length(x), size, replace, prob) :
  invalid first argument,不太明白是怎么回事。

另,我确实需要得到shuffle后行名和列名顺序相同的矩阵。您告诉了方法,但我不知道具体该怎么实现。可以麻烦再说细一点吗?耽误您时间了,谢谢!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2020-5-22 19:05:51
dark293 发表于 2020-5-22 15:30
非常感谢您的回复!我在执行上述命令时报错了,Error in sample.int(length(x), size, replace, prob) :  ...
不好意思,种菜去了,才回来。
之前的,只是个示例,报错的原因可能是你没改成你的矩阵名称。
按照你的要求,重写了一下,仍然只是示例,因为我也不知道你的原矩阵是什么,你只要把代码中的A改成原矩阵的名称就可以了,另外你的原矩阵必须有列名和行名才行。

a<-matrix(runif(100,1,100),10)
colnames(A)<-c("A2","b3",letters[3:10])
rownames(A)<-c("A2","b3",letters[3:10])
#以上是建一个示例矩阵,与你要做的任务没有关系,
#以下的代码才是你需要的,只要把代码中的两处A改成你的矩阵名就可以

shuffle<-sample(colnames(A),dim(A)[2]) #随机取A矩阵的列名作为B矩阵行列名
B=A #复制矩阵
colnames(B)<-shuffle
rownames(B)<-shuffle
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2020-5-23 11:40:52
llb_321 发表于 2020-5-22 19:05
不好意思,种菜去了,才回来。
之前的,只是个示例,报错的原因可能是你没改成你的矩阵名称。
按照你的 ...
问题解决了,非常感谢您的耐心回复。我晚上在做实验,刚补觉起床,再次感谢!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2020-5-23 17:52:11
llb_321 发表于 2020-5-22 19:05
不好意思,种菜去了,才回来。
之前的,只是个示例,报错的原因可能是你没改成你的矩阵名称。
按照你的 ...
兄台,您好!
请教一下,如何实现保持矩阵行、列名称不变(对称矩阵),个体自身之间的值始终为0(对角线始终为0),打乱不同个体间的数值呢?如下图所示。我只会按行或列打乱数据,但那样的话,矩阵结构就变了,就不是对称矩阵了。不知道我讲清楚了没。

麻烦您不吝赐教,谢谢!

微信图片_20200523174638.png


附件列表
微信图片_20200523174531.jpg

原图尺寸 96.55 KB

微信图片_20200523174531.jpg

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群