首页 > 解决方案 > 计算 R 中值随时间出现的百分比

问题描述

我是 R 新手,很抱歉,如果这是已经被询问和解决的问题 - 整个早上都在尝试搜索,但我不确定我是否能够正确地用词。

我希望能够计算一个值随时间出现的百分比。例如,我有一个包含两列的表,天数和输入值。

是否可以计算特定值相对于天数和先前事件的出现百分比,然后对其进行变异?IE

Day     Value     Percentage
1         1          1.00
2         1          1.00
3         2          ... 
4         1          ...

最终目标是将其显示在曲线图中,显示在整个时间段内值 1 的使用情况。

可能有更好的方法,而不是在这里使用百分比。这是我最初想到的。

标签: r

解决方案


一种选择使用replace

dat$Percentage <- with(dat,
                       replace(cumsum(Value == 1) / seq_along(Value), Value != 1, NA))
dat
#   Day Value Percentage
#1    1     1  1.0000000
#2    2     1  1.0000000
#3    3     1  1.0000000
#4    4     2         NA
#5    5     1  0.8000000
#6    6     2         NA
#7    7     2         NA
#8    8     1  0.6250000
#9    9     1  0.6666667
#10  10     1  0.7000000

如果您希望对列中的所有不同值进行此计算,Value您可以执行

dat$Percentage2 <- with(dat,
                        ave(Value, Value, FUN = seq_along) / seq_len(dim(dat)[1]))

数据

set.seed(1)
dat <- data.frame(Day = 1:10,
                  Value = sample(1:2, 10, TRUE, prob = c(.7, .3)))

推荐阅读