作者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