【问题标题】:Counting cells per Date每个日期计数单元格
【发布时间】:2020-05-04 18:37:55
【问题描述】:

我有一个按日期列出的酒店客房供应情况数据库。每天都有一些酒店可用(Availablity = T),而有些则没有(Availablity = 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      #             #

感谢您的帮助!

【问题讨论】:

  • dcast 在这里看起来非常优雅:library(data.table); dcast(setDT(df1), Date ~ Availablity)

标签: r dataframe sorting date


【解决方案1】:

我们可以在子集“日期”和“可用性”列之后使用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))

【讨论】:

  • 但是日期不是唯一的。不同的房间 ID 有许多相同的日期
  • @RonSlavaGrodko 这是基于您的示例,由于您没有显示预期的输出数字,因此不清楚
  • @RonSlavaGrodko 你的描述是am looking for a way to count the number of Trues and Falses per date. 代码是这样做的
【解决方案2】:

您可以使用基础 R 中的aggregate() 来制作它

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

【讨论】:

    【解决方案3】:

    您可以使用aggregate

    aggregate(Availablity~RoomID+Date, df, function(x) 
        c(count_true = sum(as.logical(x)), count_false = sum(!as.logical(x))))
    

    【讨论】:

      猜你喜欢
      • 2016-03-22
      • 2021-04-02
      • 2022-06-10
      • 1970-01-01
      • 1970-01-01
      • 2021-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多