[程式] R對於matrix的處理

看板Statistics作者 (Nostalgie)時間14年前 (2011/11/14 16:17), 編輯推噓1(1019)
留言20則, 3人參與, 最新討論串1/1
------------------------------------------------------------------------ [軟體程式類別]: 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

11/14 17:12, , 1F
x <- matrix(1:16,4,4)
11/14 17:12, 1F

11/14 17:12, , 2F
IA <- sample(1:4,2)
11/14 17:12, 2F

11/14 17:12, , 3F
x[IA[1],sample(1:4,1)] <- x[IA[2],sample(1:4,1)] <- 0
11/14 17:12, 3F

11/14 17:14, , 4F
若要固定 1 and 3 不動 ; IA <- c(1,3)
11/14 17:14, 4F

11/14 17:24, , 5F
這東西是你要的嗎?
11/14 17:24, 5F

11/14 19:30, , 6F
感謝你的協助, 不過我要的是在第2或4(也可兩者)上取2個值
11/14 19:30, 6F

11/14 19:30, , 7F
使之為0, 也就是剩下的8個值, 隨機取兩個的意思
11/14 19:30, 7F

11/14 20:55, , 8F
x <- matrix(1:16,4,4) ; IA <- sample(1:4,2)
11/14 20:55, 8F

11/14 20:56, , 9F
tmp<-x[IA,];tmp[sample(1:length(tmp),2)]<-0;x[IA,]<-tmp
11/14 20:56, 9F

11/14 21:08, , 10F
直接隨機抽兩個位置, 若是同row則再抽, 把他們改成0
11/14 21:08, 10F

11/14 21:10, , 11F
do {
11/14 21:10, 11F

11/14 21:10, , 12F
x <- sample(1:16, replace=F, size=2)
11/14 21:10, 12F

11/14 21:11, , 13F
} while ( x[1] % 4 == x[2] % 4 )
11/14 21:11, 13F

11/14 21:12, , 14F
matrix_obj[x] <- 0
11/14 21:12, 14F

11/14 21:13, , 15F
如果你上面的「隨機」都是均勻分佈的話,那這樣效果應該
11/14 21:13, 15F

11/14 21:13, , 16F
一樣
11/14 21:13, 16F

11/14 23:08, , 17F
喔喔, 感謝!!! 總算弄出來了 (淚~)
11/14 23:08, 17F

11/15 00:31, , 18F
我原本要處理的問題是針對一個數百個row的matrix, 先保留k
11/15 00:31, 18F

11/15 00:32, , 19F
個row不動, 再從剩下的(數百-k)個row中去使n個值為0
11/15 00:32, 19F

11/15 00:33, , 20F
不過我把gsuper大的作法延伸一下就搞定了
11/15 00:33, 20F
文章代碼(AID): #1EmCw0tQ (Statistics)