Re: [問題] list比對

看板R_Language作者 (Edster)時間8年前 (2015/11/18 19:37), 8年前編輯推噓1(1022)
留言23則, 3人參與, 最新討論串2/2 (看更多)
請參見, 懶得generate data. 應該不會太慢. 至少不用一個個比對. library(magrittr) X=list() X[[1]]= "1,2,3,4,5,6,7,8,9,19" X[[2]]= "1,3,4,6,8,9,10,15,17,18" X[[3]]= "4,5,7,11,20,24,25,27,28,29,39" X = lapply(X, function(x){as.integer(strsplit(x, ",")[[1]])}); Y = unlist(X) %>% unique %>% sort Z = matrix(NA, nrow=length(X), ncol=max(Y), dimnames=list(1:length(X), 1:max(Y))) Count=numeric(length(X)) for(i in 1:length(X)) for(j in 1:10) Z[i,X[[i]][j]] = 1 for(i in 1:length(X)){ p = Z[, names(na.omit(Z[i,]))] %>% rowSums(., na.rm=T) Count[i] = length(p[p>5]) } -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.112.4.209 ※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1447846663.A.E01.html ※ 編輯: Edster (140.112.4.209), 11/18/2015 19:53:06

11/18 21:48, , 1F
寫完之後才覺得, 最近好像版上有人問過類似的事.
11/18 21:48, 1F
※ 編輯: Edster (1.164.10.151), 11/18/2015 21:52:23

11/19 00:10, , 2F
改寫成RcppParallel http://pastebin.com/DQ6eczx2
11/19 00:10, 2F

11/19 00:12, , 3F
比我原先的版本快不少XD
11/19 00:12, 3F

11/19 00:33, , 4F
後來發現寫錯,暫時移除xd
11/19 00:33, 4F

11/19 00:38, , 5F
改好了,不過只適用於數字連續的時候
11/19 00:38, 5F

11/19 00:38, , 6F
C版真是一行文的代表,很喜歡你的method 1.
11/19 00:38, 6F

11/19 00:39, , 7F
不過好像要一直重新指定記憶體在 dat %in% dat[i,]
11/19 00:39, 7F

11/19 00:39, , 8F
可是很慢啊Orz
11/19 00:39, 8F

11/19 00:40, , 9F
然後還要reshape, 但把 sum 用在 TRUE/FALSE 上是我想都沒
11/19 00:40, 9F

11/19 00:40, , 10F
想過的做法, 學習了.
11/19 00:40, 10F

11/19 00:41, , 11F
E大做表格的方法也很amazing
11/19 00:41, 11F

11/19 00:41, , 12F
很實用,當說很擔心表格會爆XD
11/19 00:41, 12F

11/19 00:41, , 13F
11/19 00:41, 13F

11/19 00:42, , 14F
我覺得比較快的方法應該是做表格然後factor取整數
11/19 00:42, 14F

11/19 00:42, , 15F
這樣就不用用到names了
11/19 00:42, 15F

11/19 00:42, , 16F
不過就留給原po自己玩吧
11/19 00:42, 16F

11/19 01:03, , 17F
看了C版改的method 4, 突然覺得我多寫了很多不必要的設定.
11/19 01:03, 17F

11/19 01:06, , 18F
然後版大的dat應該是已經factorize後的factor吧.
11/19 01:06, 18F

11/19 01:07, , 19F
這個原po請要注意, 不然dat內的值跳號就out of boundary了
11/19 01:07, 19F

11/19 01:14, , 20F
我是只有1~100 而且樣本數夠大
11/19 01:14, 20F

11/19 01:14, , 21F
所以基本上沒跳號XD
11/19 01:14, 21F

11/19 01:14, , 22F
原po要先factor就是
11/19 01:14, 22F

11/19 09:08, , 23F
感謝大家,昨天用C大的方法真的有快多了!
11/19 09:08, 23F
文章代碼(AID): #1MJ6C7u1 (R_Language)
討論串 (同標題文章)
文章代碼(AID): #1MJ6C7u1 (R_Language)