R中的累积百分比

Omr*_*tia 2 r cumulative-sum dplyr

我有以下数据框

d2
# A tibble: 10 x 2
  ID Count
<int> <dbl>
  1     1
  2     1
  3     1
  4     1
  5     1
  6     2
  7     2
  8     2
  9     3
 10     3
Run Code Online (Sandbox Code Playgroud)

其中指出每个人(ID)的计数。

我想计算每个计数的累计百分比:1-50%,最多2:80%,最多3:100%。我试过了

> d2 %>% mutate(cum = cumsum(Count)/sum(Count))
# A tibble: 10 x 3
  ID   Count     cum
 <int> <dbl>    <dbl>
   1     1   0.05882353
   2     1   0.11764706
   3     1   0.17647059
   4     1   0.23529412
   5     1   0.29411765
   6     2   0.41176471
   7     2   0.52941176
   8     2   0.64705882
   9     3   0.82352941
  10     3   1.00000000
Run Code Online (Sandbox Code Playgroud)

但是此结果显然是错误的,因为我希望1的计数对应50%而不是29.4%。

怎么了 如何获得正确答案?

akr*_*run 6

我们得到count'Count'的值,通过取'n'的累加和来创建'Cum',然后将其除以sum'n',然后right_join加上原始数据

d2 %>% 
 count(Count) %>% 
 mutate(Cum = cumsum(n)/sum(n)) %>% 
 select(-n) %>% 
 right_join(d2) %>%
 select(names(d2), everything())
# A tibble: 10 x 3
#      ID Count   Cum
#   <int> <int> <dbl>
# 1     1     1 0.500
# 2     2     1 0.500
# 3     3     1 0.500
# 4     4     1 0.500
# 5     5     1 0.500
# 6     6     2 0.800
# 7     7     2 0.800
# 8     8     2 0.800
# 9     9     3 1.00 
#10    10     3 1.00 
Run Code Online (Sandbox Code Playgroud)

如果我们需要输出@LAP提到

d2 %>%
   mutate(Cum = row_number()/n())
#   ID Count Cum
#1   1     1 0.1
#2   2     1 0.2
#3   3     1 0.3
#4   4     1 0.4
#5   5     1 0.5
#6   6     2 0.6
#7   7     2 0.7
#8   8     2 0.8
#9   9     3 0.9
#10 10     3 1.0
Run Code Online (Sandbox Code Playgroud)