作者Edster (Edster)
看板R_Language
标题Re: [问题] list比对
时间Wed Nov 18 19:37:40 2015
请参见, 懒得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://webptt.com/cn.aspx?n=bbs/R_Language/M.1447846663.A.E01.html
※ 编辑: Edster (140.112.4.209), 11/18/2015 19:53:06
1F:→ Edster: 写完之後才觉得, 最近好像版上有人问过类似的事. 11/18 21:48
※ 编辑: Edster (1.164.10.151), 11/18/2015 21:52:23
3F:→ celestialgod: 比我原先的版本快不少XD 11/19 00:12
4F:→ celestialgod: 後来发现写错,暂时移除xd 11/19 00:33
5F:→ celestialgod: 改好了,不过只适用於数字连续的时候 11/19 00:38
6F:→ Edster: C版真是一行文的代表,很喜欢你的method 1. 11/19 00:38
7F:→ Edster: 不过好像要一直重新指定记忆体在 dat %in% dat[i,] 11/19 00:39
8F:→ celestialgod: 可是很慢啊Orz 11/19 00:39
9F:→ Edster: 然後还要reshape, 但把 sum 用在 TRUE/FALSE 上是我想都没 11/19 00:40
10F:→ Edster: 想过的做法, 学习了. 11/19 00:40
11F:→ celestialgod: E大做表格的方法也很amazing 11/19 00:41
12F:→ celestialgod: 很实用,当说很担心表格会爆XD 11/19 00:41
13F:→ celestialgod: 想 11/19 00:41
14F:→ celestialgod: 我觉得比较快的方法应该是做表格然後factor取整数 11/19 00:42
15F:→ celestialgod: 这样就不用用到names了 11/19 00:42
16F:→ celestialgod: 不过就留给原po自己玩吧 11/19 00:42
17F:→ Edster: 看了C版改的method 4, 突然觉得我多写了很多不必要的设定. 11/19 01:03
18F:→ Edster: 然後版大的dat应该是已经factorize後的factor吧. 11/19 01:06
19F:→ Edster: 这个原po请要注意, 不然dat内的值跳号就out of boundary了 11/19 01:07
20F:→ celestialgod: 我是只有1~100 而且样本数够大 11/19 01:14
21F:→ celestialgod: 所以基本上没跳号XD 11/19 01:14
22F:→ celestialgod: 原po要先factor就是 11/19 01:14
23F:推 Udyr: 感谢大家,昨天用C大的方法真的有快多了! 11/19 09:08