данные:
Каждого наблюдение принадлежит к одной из трех групп; назовем их «a», «b» и «c».Создание таблиц by_group из списка векторов с inconsist длиной
Каждое наблюдение состоит из вектора идентификаторов (целые числа). Многие из идентификаторов перекрываются, но многие этого не делают. Там же легко более 1 миллиона уникальных значений, но быстро становится более управляемым #, когда я установил мин частота около 10 или 20.
Случайные данные, сгенерированные напоминают исходные данные:
set.seed(21) #GoSpursGo random_id <- function(n) sample(1111:11111, n, replace = TRUE) ids <- replicate(1000, random_id(sample(200:700, 400))) group <- sample(c("a", "b", "c"), 1000, replace = TRUE) df <- dplyr::data_frame(group = group, ids = ids) df ## Source: local data frame [1,000 x 2] ## ## group ids ## <chr> <list> ## 1 b <int [593]> ## 2 a <int [444]> ## 3 b <int [605]> ## 4 b <int [263]> ## 5 a <int [274]> ## 6 c <int [450]> ## 7 c <int [656]> ## 8 b <int [687]> ## 9 a <int [302]> ## 10 a <int [234]> ## .. ... ...
Цель:
- Я хочу создать таблицу для каждой группы, которая описывает частоту, например, 1000 идентификаторов (по всем группам).
Проблема:
- я могу генерировать таблицы с использованием базовых
lapply
иtable
функции, но они медленно, и он чувствует себя, как будто я что-то очевидное отсутствует. Плюс, у меня достаточно волн данных, что даже небольшая прибыль от эффективности делает мою жизнь заметно легче. Я только недавно начал использоватьdplyr
больше [вместо базовых функций R], и эффективность в эффективности была превосходной ... но я рисую пустую [таблицу] на этом.
Вопрос:
- Кто-нибудь есть предложения о том, как эффективно создавать частотные таблицы, полученные из такого рода структуры данных? Я действительно люблю
dplyr
, поэтому обратная связь в этом направлении будет крутой, но я бы с удовольствием рассмотрел другие пакеты R, если это так. версия R
Основание:
## base R
base_tbl <- sapply(unique(df$group), function(x)
table(unlist(df$ids[df$group == x])))
base_tb <- data.frame(
ids = row.names(base_tbl),
base_tbl,
row.names = NULL,
stringsAsFactors = FALSE)
head(base_tb)
## ids b a c
## 1 1111 21 19 16
## 2 1112 17 19 17
## 3 1113 15 16 12
## 4 1114 12 16 17
## 5 1115 10 14 17
## 6 1116 8 23 17
Каков ваш ожидаемый результат – Bg1850
Просьба показать, как вы делаете это в базе R, чтобы мы знали ожидаемый результат (даже если он медленный). –
Опубликуйте в ближайшее время, когда я только что покинул свой офис. – mkearney