R:通过ID计算2列的商

标签 r percentage

这是我的数据:

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”的 ecart 数量的百分比。

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

这是如何工作的:这将修改 percentage 的值仅供引用 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]

关于R:通过ID计算2列的商,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31455806/

相关文章:

r - na.locf 但不要做尾随 NA

html - 使用百分比和 float 强制 overflow-x

c#百分比计算说明

html - 边界半径百分比

percentage - 在没有固定高度的情况下保持行高在 div 中垂直居中

java - 通过按给定百分比增加来传递和更新分数数组

RSelenium 找不到具有给定参数的元素

引用格式化表的列号而不是变量名称

r - 使用将连续变量分成两组的值构建表

R:避免循环或行应用功能