Предположим, что у меня есть список, подобный этому:Каков самый быстрый способ сокращения элементов списка по частоте?
set.seed(12731)
out <- lapply(1:sample.int(10, 1), function(x){sample(letters[1:4], x, replace = T)})
[[1]]
[1] "b"
[[2]]
[1] "d" "c"
[[3]]
[1] "b" "a" "a"
[[4]]
[1] "d" "d" "b" "c"
[[5]]
[1] "d" "d" "c" "c" "b"
[[6]]
[1] "b" "d" "b" "d" "c" "c"
[[7]]
[1] "a" "b" "d" "d" "b" "a" "d"
Я хотел бы иметь векторов длины одной, заданной элементом высокой частоты в списке. Обратите внимание, что может иметь векторы длины> 1, если нет дубликатов. Таблица частот, как это:
table(unlist(out))[order(table(unlist(out)), decreasing = T)]
b c d a
16 14 13 12
исход примера что-то вроде этого:
list("b", "c", "b", "b", "b", "b", "b")
REMARK Можно иметь векторов длины> 1, если нет дубликатов ,
out <- lapply(1:sample.int(10, 1), function(x){sample(letters[1:4], x, replace = T)})
length(out)
[1] 10
out[[length(out)+1]] <- c("L", "K")
out
[[1]]
[1] "c"
[[2]]
[1] "d" "a"
[[3]]
[1] "c" "b" "a"
[[4]]
[1] "b" "c" "b" "c"
[[5]]
[1] "a" "a" "d" "c" "d"
[[6]]
[1] "d" "b" "d" "d" "d" "a"
[[7]]
[1] "d" "b" "c" "c" "d" "c" "a"
[[8]]
[1] "d" "a" "d" "b" "d" "a" "b" "d"
[[9]]
[1] "a" "b" "b" "b" "c" "c" "a" "c" "d"
[[10]]
[1] "d" "d" "d" "a" "d" "d" "c" "c" "a" "c"
[[11]]
[1] "L" "K"
Ожидаемые результаты:
list("c", "d", "c", "c", "d", "d", "d", "d", "d", "d", c("L", "K"))
Вам нужно «set.seed» –
TX, вы имеете в виду, чтобы сделать пример более четким? –
И сделать его воспроизводимым, чтобы все, кто пытается решить, могли работать с одним и тем же набором данных и сравнивать решения. –