Подсчет клеток на дату - PullRequest
       1

Подсчет клеток на дату

2 голосов
/ 17 января 2020

У меня есть база данных о наличии номеров в отелях по дате. Каждый день некоторые отели были доступны (Наличие = T), а некоторые не были (Доступность = F). Я ищу способ подсчитать количество истин и ложностей за дату. Первоначально, фрейм данных выглядит следующим образом:

Room ID   Date    Availablity 
112      1/1/19       T
112      2/1/19       F
112      3/1/19       F
113      1/1/19       F
113      2/1/19       T
114      1/1/19       T

Я хочу подсчитать, сколько раз каждая дата имеет значение True и False, а затем составить график занятости по данным за год. А именно, дата даты выглядит следующим образом:

Date     num of Ts    num of Fs
1/1/19      #             #
2/1/19      #             #
3/1/19      #             #

Спасибо за помощь!

Ответы [ 3 ]

3 голосов
/ 17 января 2020

Мы можем использовать table после поднабора столбцов «Дата» и «Доступность». Он получит счетчик FALSE/TRUE из «Доступности» для каждого уникального «Дата»

table(df1[-1])

Или в формате tbl_df/data.frame

library(dplyr)
library(tidyr)
df1 %>% 
   count(Date, Availablity) %>% 
   pivot_wider(names_from = Availablity, values_from = n, values_fill = list(n = 0))

, который аналогичен до

df1 %>% 
   group_by(Date) %>%
   summarise(num_of_false = sum(!Availablity), num_of_true = sum(Availablity))

данные

df1 <- structure(list(RoomID = c(112L, 112L, 112L, 113L, 113L, 114L), 
    Date = c("1/1/19", "2/1/19", "3/1/19", "1/1/19", "2/1/19", 
    "1/1/19"), Availablity = c(TRUE, FALSE, FALSE, FALSE, TRUE, 
    TRUE)), class = "data.frame", row.names = c(NA, -6L))
1 голос
/ 18 января 2020

Вы можете использовать aggregate

aggregate(Availablity~RoomID+Date, df, function(x) 
    c(count_true = sum(as.logical(x)), count_false = sum(!as.logical(x))))
1 голос
/ 18 января 2020

Вы можете использовать aggregate() из базы R, чтобы сделать его

dfout <- aggregate(Availablity ~ Date,df,function(x) setNames(cbind(sum(!x),sum(x)),c("num_Ts","num_Fs")))

таким, что

> dfout
    Date Availablity.num_Ts Availablity.num_Fs
1 1/1/19                  1                  2
2 2/1/19                  1                  1
3 3/1/19                  1                  0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...