ggplot stat-ecdf 累积分布自定义最大值
ggplot stat-ecdf cumulative distribution custom maximum
我有一个格式如下的 df:
df <- read.table(text="
DAYS STATUS ID
2 Complete A
10 Complete A
15 Complete B
NA Incomplete A
NA Incomplete B
20 Complete C", header=TRUE)
我使用以下方法绘制了累积分布:
ggplot(df,aes(x=DAYS, color=ID)) +
stat_ecdf(geom = "step")
因为这只是绘制完整的行,所以我想包括几天内有 NA 的不完整行。通过这样做,每个 ID 的累积分布不会达到 100%,因为某些行没有天数。
ID PERCENT_COMPLETE
A .95
B .55
C .5
例如,在我的完整数据集中,ID A 的状态为 0.95,因此分布线的最大值为 0.95,而 B 的最大值为 0.55。
似乎没有任何绘图函数以您想要的方式处理 NA 值。所以我们可以使用 dplyr
按照我们想要的方式预先计算值
library(ggplot2)
library(dplyr)
df <- read.table(text="
DAYS STATUS ID
2 Complete A
10 Complete A
15 Complete B
NA Incomplete A
NA Incomplete B
20 Complete C", header=TRUE)
incomplete_cdf <- function(x, gmin, gmax) {
cdf <- rle(sort(na.omit(x)))
obsx <- cdf$values
obsy <- cumsum(cdf$lengths)/length(x)
data.frame(x = c(gmin, obsx, gmax) , y=c(0, obsy, tail(obsy, 1)))
}
df %>%
mutate(gmin =min(DAYS, na.rm=TRUE), gmax=max(DAYS, na.rm=TRUE)) %>%
group_by(ID) %>%
summarize(incomplete_cdf(DAYS, first(gmin), first(gmax)))%>%
ggplot(aes(x=x, y=y, color=ID)) +
geom_step()
我有一个格式如下的 df:
df <- read.table(text="
DAYS STATUS ID
2 Complete A
10 Complete A
15 Complete B
NA Incomplete A
NA Incomplete B
20 Complete C", header=TRUE)
我使用以下方法绘制了累积分布:
ggplot(df,aes(x=DAYS, color=ID)) +
stat_ecdf(geom = "step")
因为这只是绘制完整的行,所以我想包括几天内有 NA 的不完整行。通过这样做,每个 ID 的累积分布不会达到 100%,因为某些行没有天数。
ID PERCENT_COMPLETE
A .95
B .55
C .5
例如,在我的完整数据集中,ID A 的状态为 0.95,因此分布线的最大值为 0.95,而 B 的最大值为 0.55。
似乎没有任何绘图函数以您想要的方式处理 NA 值。所以我们可以使用 dplyr
library(ggplot2)
library(dplyr)
df <- read.table(text="
DAYS STATUS ID
2 Complete A
10 Complete A
15 Complete B
NA Incomplete A
NA Incomplete B
20 Complete C", header=TRUE)
incomplete_cdf <- function(x, gmin, gmax) {
cdf <- rle(sort(na.omit(x)))
obsx <- cdf$values
obsy <- cumsum(cdf$lengths)/length(x)
data.frame(x = c(gmin, obsx, gmax) , y=c(0, obsy, tail(obsy, 1)))
}
df %>%
mutate(gmin =min(DAYS, na.rm=TRUE), gmax=max(DAYS, na.rm=TRUE)) %>%
group_by(ID) %>%
summarize(incomplete_cdf(DAYS, first(gmin), first(gmax)))%>%
ggplot(aes(x=x, y=y, color=ID)) +
geom_step()