Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 通过时间累积加法绘制变量的分布_R - Fatal编程技术网

R 通过时间累积加法绘制变量的分布

R 通过时间累积加法绘制变量的分布,r,R,我正试图做一些对我在R方面的专业知识来说相当困难的事情。 我有一个日期变量,它基本上说明了我的调查对象是什么时候开始的。因此,缺少值(非受访者)和日期(受访者) 我想要绘制的是一个具体变量(例如女性的百分比)在我拥有的时间范围内的频率分布。简单地说,一个图表显示第一天女性的X%,第二天(包括第一天的人)的Y%,等等;对于三个实验组可用 我不懂。我查看了一些以雨水或其他自然现象为例的资源,并使用 cumsum() 命令内部ggplot执行它,但似乎不是我的目的。我甚至不确定我是否需要另一个包裹

我正试图做一些对我在R方面的专业知识来说相当困难的事情。 我有一个日期变量,它基本上说明了我的调查对象是什么时候开始的。因此,缺少值(非受访者)和日期(受访者)

我想要绘制的是一个具体变量(例如女性的百分比)在我拥有的时间范围内的频率分布。简单地说,一个图表显示第一天女性的X%,第二天(包括第一天的人)的Y%,等等;对于三个实验组可用

我不懂。我查看了一些以雨水或其他自然现象为例的资源,并使用

cumsum()
命令内部ggplot执行它,但似乎不是我的目的。我甚至不确定我是否需要另一个包裹

下面是示例数据

df <- structure(list(sf_sex = c("Female", "Female", "Female", "Female", 
                      "Female", "Male", "Female", "Male", "Female", "Female", "Female", 
                      "Female", "Male", "Female", "Male", "Female", "Male", "Male", 
                      "Male", "Female", "Female", "Female", "Female", "Female", "Female", 
                      "Female", "Male", "Male", "Male", "Male", "Female", "Male", "Female", 
                      "Male", "Male", "Male", "Female", "Male", "Female", "Male", "Male", 
                      "Female", "Male", "Female", "Female", "Female", "Male", "Male", 
                      "Female", "Male", "Female", "Female", "Female", "Male", "Male", 
                      "Female", "Male", "Male", "Male", "Female", "Male", "Male", "Female", 
                      "Male", "Male", "Male", "Male", "Female", "Female", "Male", "Female", 
                      "Female", "Female", "Female", "Male", "Female", "Female", "Male", 
                      "Female", "Male", "Male", "Female", "Female", "Male", "Female", 
                      "Male", "Female", "Female", "Male", "Male", "Female", "Male", 
                      "Female", "Male", "Male", "Female", "Male", "Female", "Female", 
                      "Female"), StartDate = c("06/07/2019", "06/06/2019", NA, "05/21/2019", 
                                               NA, NA, "05/24/2019", NA, NA, "05/20/2019", NA, "06/04/2019", 
                                               NA, NA, NA, NA, "06/16/2019", NA, NA, NA, "05/23/2019", NA, NA, 
                                               NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, "05/23/2019", 
                                               NA, NA, NA, NA, NA, NA, NA, NA, NA, "05/22/2019", NA, "06/13/2019", 
                                               NA, NA, "05/28/2019", "05/23/2019", NA, NA, NA, NA, NA, NA, "05/29/2019", 
                                               "05/22/2019", NA, "05/23/2019", NA, "05/31/2019", NA, "05/22/2019", 
                                               NA, "07/02/2019", "06/02/2019", NA, NA, "05/27/2019", NA, NA, 
                                               NA, "05/27/2019", NA, NA, NA, NA, "06/04/2019", "05/22/2019", 
                                               NA, NA, "05/24/2019", NA, "05/25/2019", "05/21/2019", "05/20/2019", 
                                               NA, NA, "05/24/2019", NA, NA, "06/03/2019", "05/22/2019", "05/20/2019"
                      )), row.names = c(2L, 9L, 12L, 23L, 24L, 38L, 48L, 49L, 52L, 
                                        53L, 55L, 68L, 71L, 75L, 84L, 90L, 107L, 114L, 115L, 117L, 118L, 
                                        122L, 125L, 134L, 138L, 144L, 148L, 163L, 169L, 179L, 185L, 188L, 
                                        199L, 206L, 209L, 211L, 223L, 227L, 230L, 233L, 234L, 237L, 241L, 
                                        243L, 247L, 257L, 269L, 275L, 277L, 284L, 287L, 288L, 291L, 292L, 
                                        295L, 301L, 310L, 314L, 316L, 324L, 329L, 331L, 333L, 338L, 341L, 
                                        344L, 363L, 365L, 372L, 373L, 375L, 385L, 400L, 401L, 411L, 416L, 
                                        421L, 423L, 427L, 429L, 439L, 440L, 443L, 444L, 455L, 465L, 468L, 
                                        479L, 504L, 511L, 518L, 522L, 528L, 529L, 530L, 538L, 541L, 542L, 
                                        543L, 554L), class = "data.frame")
df更新


你是说下面这样的东西吗

df %>%
  na.omit() %>%
  mutate(cnt = 1) %>%
  ggplot(aes(x = StartDate, y = cnt, fill = sf_sex)) +
  geom_bar(stat = "identity", position = "stack")


这是一个精心设计的问题

这是我的解决方案,有一些注释需要解释——如果有什么不清楚的地方,请告诉我

df %>% 
  # convert StartDate from character to something sort-able 
  mutate(date = lubridate::mdy(StartDate)) %>% 
  arrange(date) %>% 
  # get numerator and denominator of proportion female by date x
  mutate(Rs = cumsum(sf_sex %in% c("Male", "Female")),
         female_Rs = cumsum(sf_sex == "Female")) %>% 
  # take last observation per date
  group_by(date) %>% 
  slice(n()) %>% 
  select(date, Rs, female_Rs) %>% 
  # make the proportion
  mutate(female_prop = female_Rs/Rs) %>% 
  # plot it over time
  ggplot(aes(x = date, y = female_prop)) + 
  geom_point() +
  geom_line() 

谢谢你!问题是这些图表不是累加的,只考虑了一天,对吗?@MarcAsensioManjon抱歉,我的错。看来我没有完全明白你在这个问题上的意思。现在我更新了我的答案。希望有帮助。在执行
cumsum
s之前,您需要执行
groupby
步骤。我想知道你是否应该发布一个新的问题,数据包括团体指标。
df %>%
  na.omit() %>%
  mutate(cnt = 1) %>%
  ggplot(aes(x = StartDate, y = cnt, fill = sf_sex)) +
  geom_bar(stat = "identity", position = "fill")
df %>% 
  # convert StartDate from character to something sort-able 
  mutate(date = lubridate::mdy(StartDate)) %>% 
  arrange(date) %>% 
  # get numerator and denominator of proportion female by date x
  mutate(Rs = cumsum(sf_sex %in% c("Male", "Female")),
         female_Rs = cumsum(sf_sex == "Female")) %>% 
  # take last observation per date
  group_by(date) %>% 
  slice(n()) %>% 
  select(date, Rs, female_Rs) %>% 
  # make the proportion
  mutate(female_prop = female_Rs/Rs) %>% 
  # plot it over time
  ggplot(aes(x = date, y = female_prop)) + 
  geom_point() +
  geom_line()