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