Подсчет количества уникальных значений по дате в R - PullRequest
0 голосов
/ 19 января 2020

Пожалуйста, помогите мне подсчитать количество уникальных идентификаторов на дату. Итак, изначально существует этот фрейм данных с идентификаторами и датами

 ID         Date 
 1        2009/11/1
 1        2009/11/2
 1        2009/11/2
 2        2009/11/1
 2        2009/11/1
 2        2009/11/2 
 3        2009/11/1
 3        2009/11/3  

Можно переставить его по дате. Если мы сделаем это, то увидим, что на первом месте есть 3 уникальных идентификатора. На 2ed 2 уникальный идентификатор, а на 3-м есть один уникальный идентификатор. Таким образом, финальная таблица должна выглядеть следующим образом:

  Date      uniqueIDs
2009/11/1      3
2009/11/2      2
2009/11/3      1

Я знаю, что можно агрегировать с aggregate, используя sum, если значение равно '1' или '0' так:

aggregate(DataFrame$RoomAv ~ DataFrame$Date, DataFrame, sum)

Но как считать уникальное количество идентификаторов в день? Столбец ID представляет собой целочисленный столбец.

Большое спасибо!

Ответы [ 2 ]

1 голос
/ 19 января 2020

Вот решение с sqldf.

library(sqldf)

rawData <-"ID,Date 
 1,2009/11/1
 1,2009/11/2
 1,2009/11/2
 2,2009/11/1
 2,2009/11/1
 2,2009/11/2 
 3,2009/11/1
 3,2009/11/3 "

data <- read.csv(text = rawData,as.is=TRUE)

sqlStmt <- "select Date, count(distinct ID) from data group by Date"
sqldf(sqlStmt)

... и выводом:

> sqldf(sqlStmt)
       Date count(distinct ID)
1 2009/11/1                  3
2 2009/11/2                  2
3 2009/11/3                  1
>
1 голос
/ 19 января 2020

Вот способ, которым вы можете сделать:

# using data.table

library(data.table)
setDT(df)[,uniqueN(ID),.(Date)]

        Date V1
1: 2009/11/1  3
2: 2009/11/2  2
3: 2009/11/3  1


# using dplyr

library(dplyr)
df %>% 
  group_by(Date) %>% 
  summarise(uniqueid = n_distinct(ID))

  Date      uniqueid
  <chr>        <int>
1 2009/11/1        3
2 2009/11/2        2
3 2009/11/3        1
...