R的累积百分比

R的累积百分比,r,dplyr,cumulative-sum,R,Dplyr,Cumulative Sum,我有以下数据框 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 d2 #一个tibble:10x2 身份证计数 1 1 2 1 3 1 4 1 5 1 6 2 7 2 8

我有以下数据框

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
d2
#一个tibble:10x2
身份证计数
1     1
2     1
3     1
4     1
5     1
6     2
7     2
8     2
9     3
10     3
说明每个人(ID)拥有多少计数

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

>d2%>%突变(cum=cumsum(计数)/sum(计数))
#一个tibble:10x3
身份证总数
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
但这个结果显然是不正确的,因为我预计1的计数将对应于50%,而不是29.4%


这里怎么了?如何得到正确答案?

我们得到“count”的
count
,通过取“n”的累积和除以“n”的
sum
,创建“Cum”,然后
右键连接原始数据

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 

一种选择是:

library(dplyr)
d2 %>%
  group_by(Count) %>%
  summarise(proportion = n()) %>%
  mutate(Perc = cumsum(100*proportion/sum(proportion))) %>%
  select(-proportion)
# # A tibble: 3 x 2
# Count  Perc
# <int> <dbl>
# 1     1  50.0
# 2     2  80.0
# 3     3 100.0
库(dplyr)
d2%>%
分组依据(计数)%>%
总结(比例=n())%>%
突变(Perc=cumsum(100*比例/总和(比例)))%>%
选择(-比例)
##tibble:3 x 2
#伯爵
#  
# 1     1  50.0
# 2     2  80.0
# 3     3 100.0
这项工作:

d2 %>%
  mutate(cum = cumsum(rep(1/n(), 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

其结果是c(0.2000000 0.4000000 0.6000000 0.8000000 1.0000000.66667 1.3333333 2.0000000 1.5000000 3.0000000),当它应该以1结尾时,并且是单调递增的P希望每一行计算0.1,因为在将每一行作为数据的10%处理时,不管
Count
的值是多少。我很确定OP只想要
0.1,0.2,0.3,…,1.0
作为累积向量。在OP的帖子
中,我希望1的计数对应于50%,而不是29.4%
。是的,因为在他的尝试中,所有
1
的总和都是
0.29
(他的输出的第5行)而不是
0.5
(我的输出的第5行)。请显示您的预期输出?我不确定为什么问题被否决,而问题的答案被否决。可能应该为否决添加适当的评论。该问题无法明确实际结果应该是什么样子,并且没有以易于使用的形式提供示例数据。我不知道结果是什么应该是这样的,正如我在上面写的,我知道50%、80%和100%的期望值
library(dplyr)
d2 %>%
  group_by(Count) %>%
  summarise(proportion = n()) %>%
  mutate(Perc = cumsum(100*proportion/sum(proportion))) %>%
  select(-proportion)
# # A tibble: 3 x 2
# Count  Perc
# <int> <dbl>
# 1     1  50.0
# 2     2  80.0
# 3     3 100.0
d2 %>%
  mutate(cum = cumsum(rep(1/n(), 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