Удалить идентификаторы с менее чем 9 уникальными наблюдениями - PullRequest
1 голос
/ 20 мая 2019

Я пытаюсь отфильтровать свои данные и удалить идентификаторы, которые имеют менее 9 уникальных наблюдений за месяц. Я также хотел бы создать список идентификаторов, который включает в себя количество.

Я пробовал использовать несколько разных опций:

library(dplyr)
count <- bind %>% group_by(IDS) %>% filter(n(data.month)>= 9) %>%       ungroup()
count2 <- subset(bind, with(bind, IDS %in% names(which(table(data.month)>=9))))

Ничего из этого не сработало.

Вот как выглядят мои данные:

   data.month   ID
           01    2
           02    2
           03    2
           04    2
           05    2
           05    2
           06    2
           06    2
           07    2
           07    2
           07    2
           07    2
           07    2
           08    2
           09    2
           10    2
           11    2
           12    2
           01    5
           01    5
           02    5
           01    7
           01    7
           01    7
           01    4
           02    4
           03    4
           04    4
           05    4
           05    4
           06    4
           06    4
           07    4
           07    4
           07    4
           07    4
           07    4
           08    4
           09    4
           10    4
           11    4
           12    4

В конце концов, я бы хотел это:

IDs
2
3

Мне бы тоже хотелось это

IDs  Count
2     12
5     2
7     1
4     12

Пока этот код самый близкий, но все равно просто дает коды ошибок:

count <- bind %>%
  group_by(IDs) %>% 
  filter(length(unique(bind$data.month >=9)))

Ошибка в filter_impl (.data, quo): Аргумент 2 условие фильтра не оценивает логический вектор

Ответы [ 3 ]

2 голосов
/ 20 мая 2019

Вы можете сделать с unique и length

library(dplyr)
df %>% group_by(ID) %>% summarise(Count=length(unique(data.month)))
# A tibble: 4 x 2
     ID Count
  <int> <int>
1     2    12
2     4    12
3     5     2
4     7     1

Если хотите получить ID

df%>%group_by(ID)%>%summarise(Count=length(unique(data.month)))%>%filter(Count>9)%>%select(ID)
# A tibble: 2 x 1
     ID
  <int>
1     2
2     4
1 голос
/ 20 мая 2019

Мы можем использовать n_distinct

Для удаления ID с менее чем 9 уникальными наблюдениями

library(dplyr)

df %>%
  group_by(ID) %>%
  filter(n_distinct(data.month) >= 9) %>%
  pull(ID) %>% unique

#[1] 2 4

или

df %>%
  group_by(ID) %>%
  filter(n_distinct(data.month) >= 9) %>%
  distinct(ID)

#     ID
#  <int>
#1     2
#2     4

Для уникальных подсчетов каждого ID

df %>%
  group_by(ID) %>%
  summarise(count = n_distinct(data.month))


#     ID count
#   <int> <int>
#1     2    12
#2     4    12
#3     5     2
#4     7     1
0 голосов
/ 20 мая 2019

здесь data.table подход

library( data.table )

идентификаторы с 9 или более абервациями

unique( DT[, if (.N >= 9) .SD, by = .(data.month)]$ID )
#[1] 2 4

# уникальные идентификаторы в месяц

unique(DT, by = c("data.month", "ID"))[, .(counts = .N), by = .(IDs = ID)]
#    IDs counts
# 1:   2     12
# 2:   5      2
# 3:   7      1
# 4:   4     12

пример данных

DT <- fread("data.month   ID
           01    2
            02    2
            03    2
            04    2
            05    2
            05    2
            06    2
            06    2
            07    2
            07    2
            07    2
            07    2
            07    2
            08    2
            09    2
            10    2
            11    2
            12    2
            01    5
            01    5
            02    5
            01    7
            01    7
            01    7
            01    4
            02    4
            03    4
            04    4
            05    4
            05    4
            06    4
            06    4
            07    4
            07    4
            07    4
            07    4
            07    4
            08    4
            09    4
            10    4
            11    4
            12    4")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...