全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
10035 4
2008-06-20
有一个关系矩阵,是个方阵,为n*n (n个对象间的关系矩阵) 行标签和列名称相同,表示的都是对象名,想随机从关系矩阵中挑m个对象分析,即得到m*m 方阵,因为n的数目很大,请问有没有比较好的办法实现,删除一些对象也可以,对data.frame的操作不是很熟悉,特请教各位!
二维码

扫码加我 拉你入群

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

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

全部回复
2008-6-20 23:15:00

试试sample函数抽取列和行号,再从data.frame中取数既可

二维码

扫码加我 拉你入群

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

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

2008-6-21 00:17:00

引用数据框元素的方法与引用矩阵元素的方法相同,
可以使用下标或下标向量,也可以使用名字或名字向量.
这儿按名字举例:
令A为你所说得数据框 N*N的,m<n


attach(A) #为了方便数据框数据调用
col.name=colnames(A) #得到列名称
row.name=rownames(A)
sam.col.name=sample(col.name,m,replace=F) #列名向量不返回抽样
sam.row.name=sample(row.name,m,replace=F)
B=A[sam.row.name,sam.col.name] #生成m*m的矩阵

P.S.

boot()函数也可以更简便的实现抽样,具体可看看该函数参数说明.偶不常用呀.


[此贴子已经被作者于2008-6-21 0:25:13编辑过]

二维码

扫码加我 拉你入群

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

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

2008-6-21 00:35:00

# Suppose the correlation matrix is A

dim<-dim(A)

sample.row<-sample(seq(1,dim[1]),m,replace=F)

sample.col<-sample(seq(1,dim[2]),m,replace=F)

sample.matrix<-A[sample.row,sample.col]

二维码

扫码加我 拉你入群

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

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

2008-6-24 21:05:00

感谢两位的帮助,我深深的学习了,也找到了解决问题的方法;

两位的结果都是一样的,但都忽略了一个问题,就是所得的结果不是m个对象之间的关系矩阵,即对称的方阵,该方阵对角线上的元素值是一样的,如果是距离矩阵的话,那么对角线上面的元素的值都是0,因为自己跟自己的关系,如果是距离关系的话,就应该是0,如果是相似度矩阵的话,对角线上的元素都是1,自己跟自己的相似度为100%。

所以取的m个行标签(下标向量或者名字向量)跟m个列标签是一样的,并且顺序也应该一样,例如行标签是(2 3 5 7),列标签也应该是(2 3 5 7),这里我用的是下标向量而不是名字向量, 考虑到行标签和列标签都是一样的,表示的是n个对象名,所以随机取的行标签就应该是列标签,所以代码大致如下:(我是二楼的朋友的代码改的)

col.name=colnames(A) 
sam.col.name=sample(col.name,m,replace=F)
B=A[sam.col.name,sam.col.name]

没太明白二楼的这句

attach(A) #为了方便数据框数据调用,

有什么用?没用它也可以,查了哈资料,大致了解跟什么内存中的搜索路径绑定有关, 从而简化了访问

二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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