R:通过ID计算2列的商

R: calculate the quotient of 2 columns by ID

这是我的数据:

ID      nb     ecart    
ID1     3       NA  
ID1     3       0    
ID1     3       1.5 
ID2     2       NA  
ID2     2       648 
ID3     4       NA 
ID3     4       0  
ID3     4       0 
ID3     4       7 

我想计算每个ID =="0" 的电子购物车数量的百分比。

nb 是显示每个 ID 的行数的变量。

超出的结果:

ID      nb     ecart    percentage
ID1     3       NA        NA
ID1     3       0        1/3
ID1     3       1.5       NA
ID2     2       NA        NA
ID2     2       648       NA
ID3     4       NA        NA
ID3     4       0        2/4
ID3     4       0        2/4
ID3     4       7         NA

希望尽快得到您的答复!谢谢!

快速高效的data.table解决方案

library(data.table)
setDT(df)[ecart == 0L, percentage := round(.N / nb, 2L), by = ID]
#     ID nb ecart percentage
# 1: ID1  3    NA         NA
# 2: ID1  3   0.0       0.33
# 3: ID1  3   1.5         NA
# 4: ID2  2    NA         NA
# 5: ID2  2 648.0         NA
# 6: ID3  4    NA         NA
# 7: ID3  4   0.0       0.50
# 8: ID3  4   0.0       0.50
# 9: ID3  4   7.0         NA

工作原理:仅当 ecart == 0L 通过计算子组的大小(使用 .N) 除以 nb


或者(正如@CathG 所评论的那样),如果你想要一个漂亮的字符打印而不是一个数值,你可以这样做

setDT(df)[ecart == 0L, percentage := paste0(.N, "/", nb), by = ID]

或者如果您更喜欢使用二进制连接

setkey(setDT(df), ecart)[.(0L), percentage := paste0(.N, "/", nb), by = ID]

这是一个 dplyr 答案。

library(dplyr)

data %>%
  group_by(ID) %>% 
  mutate(percentage =
         ifelse(is.na(ecart),
                NA,
                sum(ecart == 0, na.rm = TRUE)/n()))