作者innocent817 (Shawn纯真)
看板Statistics
标题[程式] R 如何找出行向量在矩阵中的行数
时间Tue Jul 1 22:35:50 2014
------------------------------------------------------------------------
[软体程式类别]:
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://webptt.com/cn.aspx?n=bbs/Statistics/M.1404225353.A.F3C.html
1F:→ celestialgod:which(apply(setX, 1, function(v) v==X)) 07/02 00:43
2F:→ celestialgod:若担心rounding error...可以把v==X改成下面的code 07/02 01:38
3F:→ celestialgod:sum((v-X)^2) < 1e-12 07/02 01:38
4F:→ koai:which(rowSums(rep(1,nrow(setX))%x%t(X)==setX)==ncol(setX) 07/02 13:52
5F:→ koai:) 07/02 13:52
6F:→ celestialgod:我错了 v==X 应该成 sum(v==X) == length(v) 07/02 16:48
7F:→ innocent817:谢谢大家的回应,现在还不太会用apply,原来没这麽难 07/02 21:43
8F:→ celestialgod:原PO不客气,欢迎去R_Language版问任何问题喔~~ 07/02 21:44
9F:→ celestialgod:我们正需要文章!!!!!! 07/02 21:44
10F:→ innocent817:to K大,用rowSums的会不会有不同组合但总合一样的问 07/02 21:44
11F:→ celestialgod:原PO的考量是有可能的~~~只是看你的资料是浮点数还是 07/02 21:45
12F:→ celestialgod:整数~~ 07/02 21:45
13F:→ innocent817:是浮点数就不会有问题了吗?还是说只是机率很小 07/02 21:47
14F:→ celestialgod:机率太小XD 07/02 21:49
15F:→ innocent817:我想也是XDDDDD 07/02 21:50
16F:→ innocent817:to C大,所以which(apply(setX, 1, function(v) sum(v 07/02 21:51
17F:→ innocent817:==X) == length(v)))是完整的code? 07/02 21:52
18F:→ celestialgod:对,麻烦你先测试看看,我没跑过,抱歉@@ 07/02 21:53
19F:→ innocent817:好的!马上来试验一下XDDDDD 07/02 21:53
20F:推 koai:这里的rowSums不是指列合相等 07/02 23:01
21F:推 koai:你可以把which跟rowSums拆掉,看看结果!手机不方便回很清楚 07/02 23:06
22F:→ celestialgod:喔,原来K大的写法就跟我用apply类似 07/02 23:18
23F:→ innocent817:试过了,都是成功的喔! 07/02 23:25