【问题标题】:Frequencies by date按日期排列的频率
【发布时间】:2021-03-12 12:02:05
【问题描述】:

我有一个包含数千行的数据框。每个案例都有一个日期,每个案例都有四个带有是/否答案的状态变量。也有缺少变量的情况。

示例数据如下

 ID     Date         Status 1         Status 2           Status 3                  Status 4
    1  2021/03/11         Yes              N/A                 N/A                       N/A
    2  2021/03/11         No               N/A                 N/A                       N/A
    3  2021/03/11         Yes              Yes                 Yes                       Yes 
    4  2021/03/11         and so on...

我想要的是每天分发答案。我想查看每天丢失多少“是”和“否”的条形图。

总而言之,我需要数据框中状态变量的每日频率。

xtabs(~Date+'Status 1', data = dat) 

为每个喜欢创建我想要的:

日期、是的次数和否的次数。

当我写作时:

status_1 <- as.data.frame(xtabs(~Date+'Status 1', data = dat)

那么每个日期有两行。

如何将每四个按日期的两个答案合并到一个数据框中?

【问题讨论】:

  • 我为此做了很长时间的转换,但我相信有一个更聪明、更短的选择!首先我使用 status_1

标签: r dplyr tidyr


【解决方案1】:

也许这是解决您问题的更快方法。通过使用pivot_longer 将数据集转换为长格式,您可以使用tidyverse 包在几行代码中计算频率。

示例数据

library(tidyverse) 
library(lubridate)

dat <- data.frame(ID = 1:20,
                 Date = rep(c(ymd(20200311),
                               ymd(20200312),
                               ymd(20200313), 
                               ymd(20200314)), 5),
                 `Status 1` = sample(c("Yes", "No", NA), 20, replace = T),
                 `Status 2` = sample(c("Yes", "No", NA), 20, replace = T),
                 `Status 3` = sample(c("Yes", "No", NA), 20, replace = T),
                 `Status 4` = sample(c("Yes", "No", NA), 20, replace = T),
                 check.names = F)

代码

dat2 <- dat %>% 
  pivot_longer(cols = -c(ID,  Date)) %>% 
  group_by(Date, name, value) %>%
  summarise(n = n())

head(dat2)
# A tibble: 6 x 4
  Date       name     value     n
  <date>     <chr>    <fct> <int>
1 2020-03-11 Status 1 Yes       2
2 2020-03-11 Status 1 NA        3
3 2020-03-11 Status 2 No        1
4 2020-03-11 Status 2 Yes       2
5 2020-03-11 Status 2 NA        2
6 2020-03-11 Status 3 Yes       2

示例图

ggplot(dat2) +
  geom_col(aes(x = name, y = n, fill = value)) +
  facet_wrap(.~Date)

【讨论】:

    猜你喜欢
    • 2021-09-25
    • 1970-01-01
    • 1970-01-01
    • 2014-11-07
    • 1970-01-01
    • 1970-01-01
    • 2016-08-27
    • 1970-01-01
    • 2017-11-05
    相关资源
    最近更新 更多