[程式] R 如何找出行向量在矩陣中的行數

看板Statistics作者 (Shawn純真)時間11年前 (2014/07/01 22:35), 編輯推噓2(2021)
留言23則, 3人參與, 最新討論串1/2 (看更多)
------------------------------------------------------------------------ [軟體程式類別]: R [程式問題]: 資料處理 [軟體熟悉度]: 低(1~3個月) [問題敘述]: 從一個矩陣裡面找出某一行向量的行數(row) setX [,1] [,2] [,3] [,4] [1,] 0.5478628 0.4236571 0.063348888 0.5816978 [2,] 0.1227426 0.2783282 0.556765060 0.6575075 [3,] 0.2177614 0.1011441 0.477612694 0.3090689 [4,] 0.2570895 0.1206633 0.463100972 0.2678909 [5,] 0.2993308 0.0591137 0.272920355 0.2748358 [6,] 0.8092925 0.3577995 0.269098299 0.2258559 [7,] 0.2163968 0.1004386 0.901624205 0.1808827 [8,] 0.2365816 0.6628025 0.001174936 0.2525371 [9,] 0.1322765 0.5107590 0.126295884 0.2404161 [10,] 0.1160569 0.1170848 0.876691229 0.0657857 X [1] 0.2163968 0.1004386 0.9016242 0.1808827 如上面的數據,每一行為一組資料[i,],每一欄皆為一種屬性 想要從setX中找出與X完全相同的資料的行數 以上面的資料來看,我想要得到的答案為7 [程式範例]: 想過使用which,可是which似乎僅適用於元素 像是which(setX==X[1],arr.ind=T) 以上述資料而言是可以找到要的答案,但無法確保該向量與該行完全相同 也想過用match,可是失敗 由於每一欄皆為一種屬性,所以不能先排列再比較 煩請版上大大了 ----------------------------------------------------------------------------- -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 163.14.45.36 ※ 文章網址: http://www.ptt.cc/bbs/Statistics/M.1404225353.A.F3C.html

07/02 00:43, , 1F
which(apply(setX, 1, function(v) v==X))
07/02 00:43, 1F

07/02 01:38, , 2F
若擔心rounding error...可以把v==X改成下面的code
07/02 01:38, 2F

07/02 01:38, , 3F
sum((v-X)^2) < 1e-12
07/02 01:38, 3F

07/02 13:52, , 4F
which(rowSums(rep(1,nrow(setX))%x%t(X)==setX)==ncol(setX)
07/02 13:52, 4F

07/02 13:52, , 5F
)
07/02 13:52, 5F

07/02 16:48, , 6F
我錯了 v==X 應該成 sum(v==X) == length(v)
07/02 16:48, 6F

07/02 21:43, , 7F
謝謝大家的回應,現在還不太會用apply,原來沒這麼難
07/02 21:43, 7F

07/02 21:44, , 8F
原PO不客氣,歡迎去R_Language版問任何問題喔~~
07/02 21:44, 8F

07/02 21:44, , 9F
我們正需要文章!!!!!!
07/02 21:44, 9F

07/02 21:44, , 10F
to K大,用rowSums的會不會有不同組合但總合一樣的問
07/02 21:44, 10F

07/02 21:45, , 11F
原PO的考量是有可能的~~~只是看你的資料是浮點數還是
07/02 21:45, 11F

07/02 21:45, , 12F
整數~~
07/02 21:45, 12F

07/02 21:47, , 13F
是浮點數就不會有問題了嗎?還是說只是機率很小
07/02 21:47, 13F

07/02 21:49, , 14F
機率太小XD
07/02 21:49, 14F

07/02 21:50, , 15F
我想也是XDDDDD
07/02 21:50, 15F

07/02 21:51, , 16F
to C大,所以which(apply(setX, 1, function(v) sum(v
07/02 21:51, 16F

07/02 21:52, , 17F
==X) == length(v)))是完整的code?
07/02 21:52, 17F

07/02 21:53, , 18F
對,麻煩你先測試看看,我沒跑過,抱歉@@
07/02 21:53, 18F

07/02 21:53, , 19F
好的!馬上來試驗一下XDDDDD
07/02 21:53, 19F

07/02 23:01, , 20F
這裡的rowSums不是指列合相等
07/02 23:01, 20F

07/02 23:06, , 21F
你可以把which跟rowSums拆掉,看看結果!手機不方便回很清楚
07/02 23:06, 21F

07/02 23:18, , 22F
喔,原來K大的寫法就跟我用apply類似
07/02 23:18, 22F

07/02 23:25, , 23F
試過了,都是成功的喔!
07/02 23:25, 23F
文章代碼(AID): #1JiiT9yy (Statistics)
文章代碼(AID): #1JiiT9yy (Statistics)