我有一张vecs
里面有矢量的表格
set.seed(356)
vecs <- list()
for(i in 1:10) vecs[[i]] <- sample(1:100,100,replace = T)
这里
head(vecs)
[[1]]
[1] 74 32 2 18 52 85 51 96 17 66 2 92 76 95 75 62 55 40 12 99 43 10 30 70 52
[26] 98 61 34 26 37 38 48 81 53 49 18 20 97 59 49 58 44 13 2 90 27 6 39 90 36
[51] 6 77 25 71 35 78 37 90 96 90 31 100 27 34 59 69 60 14 87 77 2 71 69 2 25
[76] 47 87 91 33 13 44 31 39 70 25 82 73 72 50 21 51 86 6 36 88 74 7 15 99 13
[[2]]
[1] 25 9 73 9 57 8 16 81 75 61 86 6 80 34 43 92 42 56 85 15 50 93 21 61 95 64 9 27 79 76 74 78 48 47
[35] 67 91 30 45 13 84 55 58 20 64 60 12 69 16 68 82 62 21 49 18 19 62 85 80 35 83 83 25 33 85 21 3 44 25
[69] 70 3 8 43 38 91 98 32 27 72 89 33 26 21 40 10 67 2 90 25 9 36 61 85 94 34 29 27 84 40 46 3
..................
.........
....
..
我需要从工作表中删除vecs
出现次数较少的元素,并且仅在没有这些元素的情况下n
返回vecs
li2 <- vecs # создадим новый лист
n <- 5 # зададим число "n"
让我们计算一下每个元素在整个工作表中出现的次数vecs
tb <- table(unlist(vecs)) # весь лист перекодируем в вектор
> tb
**1** 2 3 4 5 6 7 8 9 10 11 12 13 14 **15** 16 17 18 19 20 21 22 23 24 25 26 27
**5** 16 11 10 7 11 7 11 11 10 10 14 13 10 **5** 6 6 11 8 11 12 10 6 8 14 16 9
28 29 30 31 32 33 34 35 36 37 **38** 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
9 11 12 9 7 8 15 8 11 7 **5** 12 10 12 7 10 12 7 11 14 7 11 8 14 10 9 6
55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 **76** 77 78 79 80 81
7 8 8 8 8 12 17 12 12 6 8 10 14 10 14 15 12 11 8 15 13 **5** 9 11 9 7 7
82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
12 8 15 12 5 10 13 8 15 6 11 6 13 11 10 5 13 9 12
可以看出有出现5次以下的值,我们计算并调用bad.values
bad.values <- as.numeric( names(tb[tb<=n]) )
> bad.values
[1] 1 15 38 76 86 97
然后我写了一个函数f
,它接受一个向量,检查它的存在bad.values
并删除它们
f <- function(x) x[ -which(x %in% bad.values) ]
遍历列表中的每个向量vecs2
并应用 fun。f
vecs2 <- lapply(vecs2, f)
现在我们检查“清理过的”表 vecs2 ,元素的最小重复次数应该大于 5,但实际上
min(table(unlist(vecs2)))
[1] 3
这就是“已清理”的 vecs2 工作表的样子,一些向量已被完全删除......
> vecs2
[[1]]
[1] 74 32 2 18 52 85 51 96 17 66 2 92 95 75 62 55 40 12 99 43 10 30 70 52 98 61
[27] 34 26 37 48 81 53 49 18 20 59 49 58 44 13 2 90 27 6 39 90 36 6 77 25 71 35
[53] 78 37 90 96 90 31 100 27 34 59 69 60 14 87 77 2 71 69 2 25 47 87 91 33 13 44
[79] 31 39 70 25 82 73 72 50 21 51 6 36 88 74 7 99 13
[[2]]
[1] 25 9 73 9 57 8 16 81 75 61 6 80 34 43 92 42 56 85 50 93 21 61 95 64 9 27 79 74 78 48 47 67 91 30
[35] 45 13 84 55 58 20 64 60 12 69 16 68 82 62 21 49 18 19 62 85 80 35 83 83 25 33 85 21 3 44 25 70 3 8
[69] 43 91 98 32 27 72 89 33 26 21 40 10 67 2 90 25 9 36 61 85 94 34 29 27 84 40 46 3
[[3]]
integer(0)
[[4]]
[1] 13 25 69 90 3 60 24 64 33 94 66 90 20 71 14 29 3 67 11 21 57 88 24 84 99 65 54 59 52 72 89 71 39 69
[35] 94 25 65 80 47 17 61 60 73 71 2 92 99 65 80 51 82 78 18 46 79 60 74 39 41 75 39 11 98 61 63 22 22 14
[69] 48 41 46 2 8 63 81 96 43 66 87 5 47 78 41 30 88 31 62 81 25 85 44 54 75 57 6 69
帮助我了解我做错了什么