作者Godkin (Nostalgie)
看板Statistics
标题[程式] R对於matrix的处理
时间Mon Nov 14 16:17:01 2011
------------------------------------------------------------------------
[软体程式类别]:
R
[程式问题]:
如果我有一个4x4的matrix, 我想要随机取两个row固定不动
在剩下的2个row中, 再随机取两个值, 使之为0, 该怎麽做?
举例: 一个matrix
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
现在假设我想固定第1和第3个row不动, 在第2和第4个row上任取共两个值使之为0
像这样:
1 2 3 4
0 6 7 8
9 10 11 12
13 14 0 16
我目前只有办法用sample去任意把两个值变成0, 但像这种问题目前仍没什麽头绪
[软体熟悉度]:
中(3个月到1年)
[问题叙述]:
用perl的时候, 我还可以使用二维阵列去处理, 但是在R底下就没这麽熟悉了
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.116.215.175
1F:→ gsuper:x <- matrix(1:16,4,4) 11/14 17:12
2F:→ gsuper:IA <- sample(1:4,2) 11/14 17:12
3F:→ gsuper:x[IA[1],sample(1:4,1)] <- x[IA[2],sample(1:4,1)] <- 0 11/14 17:12
4F:→ gsuper:若要固定 1 and 3 不动 ; IA <- c(1,3) 11/14 17:14
5F:→ gsuper:这东西是你要的吗? 11/14 17:24
6F:→ Godkin:感谢你的协助, 不过我要的是在第2或4(也可两者)上取2个值 11/14 19:30
7F:→ Godkin:使之为0, 也就是剩下的8个值, 随机取两个的意思 11/14 19:30
8F:→ gsuper:x <- matrix(1:16,4,4) ; IA <- sample(1:4,2) 11/14 20:55
9F:→ gsuper:tmp<-x[IA,];tmp[sample(1:length(tmp),2)]<-0;x[IA,]<-tmp 11/14 20:56
10F:推 Wush978:直接随机抽两个位置, 若是同row则再抽, 把他们改成0 11/14 21:08
11F:→ Wush978:do { 11/14 21:10
12F:→ Wush978: x <- sample(1:16, replace=F, size=2) 11/14 21:10
13F:→ Wush978:} while ( x[1] % 4 == x[2] % 4 ) 11/14 21:11
14F:→ Wush978:matrix_obj[x] <- 0 11/14 21:12
15F:→ Wush978:如果你上面的「随机」都是均匀分布的话,那这样效果应该 11/14 21:13
16F:→ Wush978:一样 11/14 21:13
17F:→ Godkin:喔喔, 感谢!!! 总算弄出来了 (泪~) 11/14 23:08
18F:→ Godkin:我原本要处理的问题是针对一个数百个row的matrix, 先保留k 11/15 00:31
19F:→ Godkin:个row不动, 再从剩下的(数百-k)个row中去使n个值为0 11/15 00:32
20F:→ Godkin:不过我把gsuper大的作法延伸一下就搞定了 11/15 00:33